std::vector 包含 class 方法
std::vector that holds class methods
我这样做是为了枚举我的 class 成员
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();
}
};
这里有什么问题?
首先,你有一个额外的 void
:
std::vector<std::function<void(Hello*)>> m_members;
然后,您需要分配更多类似这样的内容:
m_members[A] = &Hello::func;
或者您可以存储绑定函数,在这种情况下 std::function<void()>
和 std::bind(&Hello::func, this)
。
1) 在调用 m_members[A] = ...
之前,您需要在 vector
中保留 space :) 不管怎样,您可以通过以下方式使事情正常进行:
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;
}
我这样做是为了枚举我的 class 成员
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();
}
};
这里有什么问题?
首先,你有一个额外的 void
:
std::vector<std::function<void(Hello*)>> m_members;
然后,您需要分配更多类似这样的内容:
m_members[A] = &Hello::func;
或者您可以存储绑定函数,在这种情况下 std::function<void()>
和 std::bind(&Hello::func, this)
。
1) 在调用 m_members[A] = ...
之前,您需要在 vector
中保留 space :) 不管怎样,您可以通过以下方式使事情正常进行:
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;
}