首页 > 解决方案 > 整数键映射到头文件中的成员函数指针

问题描述

我正在尝试在我的 .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 ‘&lt;brace-enclosed initializer list>’ to ‘std::unordered_map<int, void (*)()>’
  };
  ^

我应该如何改变这个或者在头文件中不能进行这样的初始化?

标签: c++

解决方案


正如评论中提到的,成员函数指针与自由函数指针不同。成员函数指针将是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 的成员函数。


推荐阅读