c++ - 整数键映射到头文件中的成员函数指针
问题描述
我正在尝试在我的 .hpp 头文件中初始化一个(无序的)映射,该映射具有整数键和成员函数指针值:
// in Test.hpp
#include <unordered_map>
class Test {
private:
std::unordered_map<int, void(*)()> tst = {
{1, foo}
};
void foo();
};
编译给出
test.hpp:10:2: error: could not convert ‘{{1, ((Test*)this)->Test::foo}}’ from ‘<brace-enclosed initializer list>’ to ‘std::unordered_map<int, void (*)()>’
};
^
我应该如何改变这个或者在头文件中不能进行这样的初始化?
解决方案
正如评论中提到的,成员函数指针与自由函数指针不同。成员函数指针将是void(Test::*)();
.
#include <unordered_map>
struct Test {
using mem_fun_ptr = void(Test::*)();
std::unordered_map<int,mem_fun_ptr> tst { std::make_pair(1, &Test::foo) };
void foo() {}
};
int main() {
Test t;
}
我应该如何改变这个或者在头文件中不能进行这样的初始化?
static const
从 C++11 起才允许初始化 not 的成员函数。
推荐阅读
- spring-boot - Spring Boot/Java 将枚举值映射到 RequestParam
- javascript - 如何在我的俄罗斯方块游戏中设置高分 javascript html css
- conv-neural-network - CNN如何处理多张图像
- c++ - 如何在 Windows 上静态构建和包含 wolfssl?
- unity3d - Unity 问题:将世界坐标转换为我的 Radar 的 3D 雷达坐标
- react-native - 如何制作 react-native 闹钟?
- c++ - Boost Xpressive - 字段“m_rx”的类型不完整
- laravel - URL 没有从 Laravel 5 中的路由获取用户名
- android - 已经表示权限还是异常,java.lang.SecurityException
- javascript - 是否有任何代理方法允许对象获取默认属性