簡體   English   中英

C++:如何使用指向函數的指針值創建成員 unordered_map

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM