要搜索的术语是polymorphism;这是通过通用接口与不同类型交互的通用术语。
在 C++ 中,如果您需要在运行时选择行为,通常的方法是定义一个抽象接口,它充当具体类型的基类,使用虚函数- 在运行时根据真实类型选择要调用的函数的对象。
// Abstract interface
class Hardware {
public:
virtual ~Hardware() {} // needed to safely delete objects
virtual void doSomething() = 0; // must be implemented by each concrete type
};
// One concrete type
class HardwareType1 : public Hardware
{
HardwareType1() { /* initialise */ }
void doSomething() { /* implementation for this type of hardware */ }
};
// Another concrete type
class HardwareType2 : public Hardware
{
HardwareType2() { /* initialise */ }
void doSomething() { /* implementation for this type of hardware */ }
};
现在您可以选择创建哪个,然后使用抽象接口进行交互:
// Create the correct type, depending on user input
std::unique_ptr<Hardware> hw
((userHwType == 1) ? new HardwareType1 : new HardwareType2);
// Do the right thing depending on the type
hw->doSomething();