Класс с инициализацией списка с помощью указателей на функции
Я пытаюсь написать класс, который получит (число) пару (ы) массивов символов (и строк, позже) и указателей на функции, из которых я планирую использовать нужную функцию. Я использую модифицированную версию кода, представленную в этом вопросе, в целях тестирования, поэтому у меня есть:
#include <iostream>
#include <map>
#include <initializer_list>
using namespace std;
class Test {
std::map<const char*, void(*)()> m_ints;
public:
Test(std::initializer_list<std::pair<const char*, void(*)()>> init):
m_ints(init)
{}
};
void testfunction(){
cout << "This is a test function"<<endl;
}
int main()
{
Test t = { {"hello", &testfunction} };
return 0;
}
Который при компиляции с g++ возвращает ошибку:
error: no matching function for call to ‘std::map < const char*, void (\*)()>::map(std::initializer_list < std::pair < const char*, void (*)()> >&)’
m_ints(init)
^
и ОЧЕНЬ длинный список заметок с кандидатами. Что я делаю не так, могу ли я инициализировать свою карту таким образом, или я должен использовать функцию инициализации в классе?
1 ответ
Как и ссылка, которую вы упомянули, вам нужно const
-Введите имя типа ключа в списке инициализаторов, например:
std::initializer_list<std::pair<const char* const, void(*)()>>
Обратите внимание, ключ const char* const
и не const char*
,
Если вы не хотите беспокоиться о болезненной задаче создания шрифта const
, вы можете использовать value_type
вместо этого, например:
std::initializer_list<decltype(m_ints)::value_type>