在 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();
}
}
有没有办法让方法保持静态,不创建 A
、B
或 Worker
class 的对象,并且仍然能够只需对代码进行一些小改动,并将插件从 A
更改为 B
。
我想过使用模板(没有探索),但我不想让用户知道 A
或 B
。
谢谢
您可以像这样制作 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
的用户不需要了解 A
或 B
。
我有两个 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();
}
}
有没有办法让方法保持静态,不创建 A
、B
或 Worker
class 的对象,并且仍然能够只需对代码进行一些小改动,并将插件从 A
更改为 B
。
我想过使用模板(没有探索),但我不想让用户知道 A
或 B
。
谢谢
您可以像这样制作 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
的用户不需要了解 A
或 B
。