在 worker class 中使用不同 class 的静态函数进行实验

Using static functions of different class in worker class for experimenting

我有两个 class 继承自某个虚拟基础 class

class A : public BaseClass {
    public:
       static int foo(){ ... };

       static void bar(){ ... };
};

class B : BaseClass {
    public:
       static int foo(){ ... };

       static void bar(){ ... };
};

我有另一个 class Worker 暴露给客户端并利用这两个 classes

class Worker{
    public:
       static void doFoo(){
           int result = A::foo();
           ...
       }

       static void doBar(){
           A::bar();
       }
}

我可以在 Worker class 或 B 中使用 A。现在,如果我必须将 class B 插入 Worker class,我将不得不更改 Worker 中的所有函数。

class Worker{
    public:
       static void doFoo(){
           int result = B::foo();
           ...
       }

       static void doBar(){
           B::bar();
       }
}

有没有办法让方法保持静态,不创建 ABWorker class 的对象,并且仍然能够只需对代码进行一些小改动,并将插件从 A 更改为 B

我想过使用模板(没有探索),但我不想让用户知道 AB

谢谢

您可以像这样制作 class 模板:

template <typename T>
class Worker_T {
    public:
       static void doFoo(){
           int result = T::foo();
       }

       static void doBar(){
           T::bar();
       }
};

然后选择实际使用哪个class,您只需选择以下其中一项:

using Worker = Worker_T<A>;

using Worker = Worker_T<B>;

并且 Worker 的用户不需要了解 AB