考虑以下代码:
class A
{
public:
void aFoo() {}
};
class B
{
public:
void bFoo() {}
};
class C
{
public:
void c1Foo() {}
void c2Foo() {}
};
无论代码架构如何,是否可以创建指向成员函数的指针向量,即使这些函数位于多个类中?
在这种情况下,继承不是一个解决方案,因为我们不知道要在一个类中使用多少个函数(C类有两个函数)。但我们知道它们都有相同的原型。
不同类的成员函数有不同的类型。因此,为了拥有任何同质容器(例如std::vector
or std::array
)其中您需要将它们包装在可以代表它们全部的值类型中(例如boost::variant
or boost::any
).
另一方面,如果您需要的只是特定类型的成员函数(例如void()
)并且您不介意传递应该事先调用它们的对象,那么您可以将它们存储为std::function<void()>
(对于这个具体示例)只需调用std::bind
在将它们存放在容器中之前。
举个例子,给出:
A a; B b; C c;
std::vector<std::function<void()>> vector {
std::bind(&A::aFoo, a),
std::bind(&B::bFoo, b),
std::bind(&C::c1Foo, c),
std::bind(&C::c2Foo, c)
};
您可以致电:
for (auto fn : vector)
fn();
Live demo http://coliru.stacked-crooked.com/a/8f75b9113dadba64
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)