我正在尝试在.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 (*)()>’
};
^
我应该如何更改它,或者头文件中无法进行此类初始化?
答案 0 :(得分:0)
如注释中所述,成员函数指针与自由函数指针不同。成员函数指针为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;
}
我应该如何更改此设置,否则无法进行此类初始化 头文件?
自C ++ 11起,不允许初始化不是static const
的成员函数。