运行时的C++变量类型选择

use*_*576 2 c++

我正在升级为特定硬件接口编写的旧应用程序.我现在需要在现有应用程序中添加对现代硬件的支持.

为此,我想为每种硬件类型创建一个类,并在用户选择系统中的哪个硬件时为一种类型或另一种类型分配变量.

例如:

HardwareType1和类HardwareType2都存在具有相同的成员函数.

object HW;  
if (userHwType = 1)  
    // initialize HW as a HardwareType1 class
}  
else{  
    // initialize HW as a HardwareType2 class  
}
Run Code Online (Sandbox Code Playgroud)

现在,我可以HW.doSomething()在整个代码中使用,而不是每次与硬件交互时都没有条件的硬件类型.

我确信这是非常基本的,但说实话,我甚至不知道这个叫什么或者搜索哪个条款.

谢谢!

hmj*_*mjd 7

创建一个抽象基类,并从中派生出两个具体类:一个实现type1,另一个实现type2:

class Hardware
{
public:
    virtual ~Hardware() {};
    virtual void doSomething() = 0;
};

class Hardware1: public Hardware
{
public:
    void doSomething() { // hardware type1 stuff. }
};


class Hardware2: public Hardware
{
public:
    void doSomething() { // hardware type2 stuff. }
};
Run Code Online (Sandbox Code Playgroud)

然后创建必要的实例:

std::unique_ptr<Hardware> hardware(1 == userHwType ? new Hardware1() : 
                                                     new Hardware2());

hardware->doSomething();
Run Code Online (Sandbox Code Playgroud)

如果您的编译器不支持C++ 11,那么您std::unique_ptr将无法使用.另一个智能指针会boost::scoped_ptr(或boost::shared_ptr).