将两种类型组合在一起

将两种类型组合在一起

我使用了我无法控制的第三方库。它包含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/

10-08 22:03