切换在C ++中使用类实现

时间:2013-01-14 01:44:47

标签: c++ oop

我有一个C ++程序A.cpp,我包括两个头文件X.h和Y.h.这个程序(A.cpp)有一个类'foo'和该类所有成员的原型。该类的实现在X.h和Y.h中完成。它们都包含成员函数的不同定义。但是包含一个这些文件是在程序中使用#ifdef有条件地完成的。因此,如果满足某个条件,则X.h为#include-ed,否则Y.h为#include-ed。它们都不会包含在一起。这是问题所在:我需要将此编译时切换更改为运行时切换。我知道在运行时不能包含头文件,所以有什么方法可以“选择”我想要的实现,而不使用命名空间?排除了重载,因为函数的原型是相同的。

非常感谢。 (对不起,如果这是愚蠢的。我是C ++的新手)

2 个答案:

答案 0 :(得分:3)

如果您想在运行时使用两种不同的行为,那么听起来就像是在描述多态。考虑编写两个不同的类,这些类继承了具有虚函数的公共基类。然后在运行时你可以做这样的事情:

Animal &a = (x == 3) ? Dog() : Cat();

a.talk();

答案 1 :(得分:0)

也许你想考虑静态factory method pattern?您可以使用单个方法将所选实例返回给调用者。你需要像OliCharlesworth建议的那样继承子类,然后这会使它对调用代码透明。

在伪代码中。

class baseclass{
...
static baseclass *GimmeImpl(){
    if(aImpl){
       return A();
    }else{
       return B();
    }

}

};

class A:public baseclass {...};
class B:public baseclass {...};