整数键映射到头文件中的成员函数指针

Map of integer keys to member function pointers in header file

本文关键字:成员 函数 指针 文件 映射 整数      更新时间:2023-10-16

我正在尝试在我的 .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;
}

我应该如何更改它,或者这样的初始化是不可能的 头文件?

仅允许从C++11 开始初始化未static const的成员函数。