gpt4 book ai didi

c++ - 具有函数指针的映射列表初始化的类

转载 作者:行者123 更新时间:2023-11-30 02:18:32 24 4
gpt4 key购买 nike

我正在尝试编写一个类,该类将接收(数)对 char 数组(和字符串,稍后向下)和函数指针,我计划从中使用所需的函数。我正在使用 this question 中提供的代码的修改版本出于测试目的,所以我有:

#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)
^

还有一长串非常的候选人笔记。我做错了什么,我可以像这样初始化我的 map ,还是应该在类中使用初始化函数?

最佳答案

就像您提到的链接一样,您需要 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

关于c++ - 具有函数指针的映射列表初始化的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52022312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com