Class 带有函数指针的映射列表初始化

Class with list initalization of map with function pointers

我正在尝试编写一个 class,它将接收(数)对 char 数组(和字符串,稍后向下)和函数指针,我计划从中使用想要的功能。我正在使用 中提供的代码的修改版本进行测试,所以我有:

#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++ 编译时,returns 一个错误:

error: no matching function for call to ‘std::map < const char*, void (\*)()>::map(std::initializer_list < std::pair < const char*, void (*)()> >&)’ 

     m_ints(init)
                ^

和一长串 非常 的候选笔记列表。我做错了什么,我可以像这样初始化我的地图,还是应该在 class?

中使用初始化函数

就像您提到的link一样,您需要const-ify初始化列表中键的类型名称,例如:

std::initializer_list<std::pair<const char* const, void(*)()>>

注意密钥是 const char* const 而不是 const char*

Example

如果你不想为制作类型 const 的痛苦工作而烦恼,你可以使用 value_type 代替,例如:

std::initializer_list<decltype(m_ints)::value_type>

Example