包含类方法的std :: vector

时间:2015-02-03 07:37:43

标签: c++ vector enums std std-function

我这样做是为了枚举我的班级成员

enum MemberType {A, B, C, D};

class Hello
{
public:
    std::vector<std::function<void(Hello*, void)>>     m_members;

    void func()
    {
    };

    Hello()
    {
        m_members[A] = func();
    }
};

这里有什么问题?

2 个答案:

答案 0 :(得分:3)

首先,你有一个额外的void

std::vector<std::function<void(Hello*)>>     m_members;

然后,你需要分配更像这样的东西:

m_members[A] = &Hello::func;

或者您可以存储绑定的函数,在这种情况下std::function<void()>std::bind(&Hello::func, this)

答案 1 :(得分:2)

1)在致电m_members[A] = ...之前,您需要在vector :)中预留空间无论如何,这里有如何让事情有效:

class Hello
{
public:
    std::vector<void(Hello::*)()> m_members;

    void func()
    {
        cout << "func" << endl;
    };

    Hello()
    {
        m_members.push_back(&Hello::func);
    }
};

int main()
{
    Hello obj;
    (obj.*obj.m_members[A])();
    std::cin.get();
    return 0;
}