创建指向成员函数的指针的映射

时间:2016-02-25 21:15:22

标签: c++ c++11 member-function-pointers

我正在尝试创建一个由int组成的地图和指向成员函数的指针。

class Factory
{
  public:
    typedef nts::IComponent *(*createFunction)(const std::string &value);
    Factory();
    ~Factory();
    nts::IComponent *createComponent(const std::string &type, const std::string &value);
  private:
    nts::IComponent *create4001(const std::string &value) const;
    nts::IComponent *create4013(const std::string &value) const;
    nts::IComponent *create4040(const std::string &value) const;
    nts::IComponent *create4081(const std::string &value) const;

    std::map<int, createFunction> map = {{4001, Factory::create4001},
                                        {4013, Factory::create4013},
                                        {4040, Factory::create4040}};
};

但我有以下错误:

includes/Factory.hpp:24:68: error: could not convert ‘{{4001, ((Factory*)this)->Factory::create4001}, {4013, ((Factory*)this)->Factory::create4013}, {4040, ((Factory*)this)->Factory::create4040}}’ from ‘<brace-enclosed initializer list>’ to ‘std::map<int, nts::IComponent* (*)(const std::__cxx11::basic_string<char>&)>’
                                         {4040, Factory::create4040}};

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

typedef指向(非静态)成员函数的指针如下所示:

typedef nts::IComponent *(Factory::*createFunction)(const std::string &value) const;
//                        ^^^^^^^                                             ^^^^^
//                  nested name specifier                             missing const

优惠形式:

using createFunction = nts::IComponent *(Factory::*)(const std::string &value) const;

地图初始化:

std::map<int, createFunction> map = {{4001, &Factory::create4001},
                                     {4013, &Factory::create4013},
                                     {4040, &Factory::create4040}};
//                                          ^
//                      compiler would think you're trying to call
//                      a static function without an argument list