[英]C++: How to create a member unordered_map with values of pointers to functions
這個問題回答了如何為常規unordered_map
執行此操作,但是成員之一呢? IDE在評論中報錯。 opcodes
將字符映射到指向函數的指針,這些函數應該代表具體實例調用。 另外我想知道是否有可能使它成為 constexpr。
// Foo.cpp
class Foo {
public:
void execute(char c) { (*opcodes[c])(); }
void operation1()
{
// Do something with value_
}
void operation2();
private:
typedef void (*operation)();
static const std::unordered_map<char, operation> opcodes{
{'1', &Foo::operation1},
{'2', &Foo::operation2}
}; // No matching constructor for initialization of 'const std::unordered_map<char, operation>' (aka 'const unordered_map<char, void (*)()>')
int value_;
}
// main.cpp
int main()
{
Foo foo;
foo.execute('1');
return 0;
}
如何使用指向函數的指針值創建成員 unordered_map?
像這樣:
struct example {
using fun = return_type(/*arg types*/);
std::unordered_map<key_type, fun*> map;
};
typedef void (*operation)(); static const std::unordered_map<char, operation> opcodes{ {'1', &Foo::operation1}, {'2', &Foo::operation2} }
問題在於您有一個 map 指針 function,但您嘗試使用指向成員函數的指針進行初始化。 指向成員 function 的指針不是指向 function 的指針,不能轉換為指向 function 的指針。
因此,您需要的是一個指向成員函數的指針 map:
using operation = void (Foo::*)();
或者,您不必使用非靜態成員函數。
以及從 map 獲取 [pointer to member] function 后如何調用它?
例子:
(this->*opcodes.at('1'))();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.