use*_*616 2 c++ function-pointers
考虑以下代码:
class A
{
public:
void aFoo() {}
};
class B
{
public:
void bFoo() {}
};
class C
{
public:
void c1Foo() {}
void c2Foo() {}
};
Run Code Online (Sandbox Code Playgroud)
无论代码架构如何,是否可以创建指向成员函数的指针向量,即使这些函数属于多个类?
在这种情况下,继承不是解决方案,因为我们不知道我们想在一个类中使用多少函数(C类有两个函数).但我们知道它们都有相同的原型.
不同类的成员函数有不同的类型.因此,为了拥有任何同类容器(如std::vector或std::array那些),您需要将它们包装在一些可能代表它们的值类型中(如boost::variant或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)
};
Run Code Online (Sandbox Code Playgroud)
你可以打电话:
for (auto fn : vector)
fn();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
421 次 |
| 最近记录: |