我使用了我无法控制的第三方库。它包含2个类A和B,它们都定义了一个具有相同名称的方法:
class A {
public:
...
void my_method ();
};
class B {
public:
...
void my_method ();
};
我想创建一个包含一个属于类A或B的成员的类C。至关重要的是,我只能在运行时知道我是否需要A或B。此类C将仅调用方法
my_method
。如果可以修改代码,则只需使A和B派生自定义my_method的父类(接口(interface))。但是我不能。
创建此类C的最简单/最优雅的方法是什么?我当然可以这样定义C:
class C {
public:
void call_my_method() { if (a) a->my_method() else b->my_method(); }
private:
A* a;
B* b;
但是我想避免每次都支付if语句的费用。它也感觉不雅。有没有办法创建A类或B类的父类(super class)型?或对此问题有其他解决方案?
最佳答案
您可以使用std::function
(虽然不确定其性能如何),如下所示:
class C {
public:
void call_my_method() { my_method(); }
void use_a(A* a) { my_method = [=]() { a->my_method() }; }
void use_b(B* b) { my_method = [=]() { b->my_method() }; }
private:
std::function<void()> my_method;
};
关于c++ - 将两种类型组合在一起,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38244924/