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

时间:2018-10-19 18:51:48

标签: 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 (*)()>’
  };
  ^

我应该如何更改它,或者头文件中无法进行此类初始化?

1 个答案:

答案 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的成员函数。