我正在编写一个通用软件,它将加载到相同基本硬件的许多不同变体上。它们都具有相同的处理器,但具有不同的外围设备和它们自己需要执行的功能。软件将通过读取硬件开关值来知道它应该运行哪个变体。
简而言之,这是我当前的实现:
class MyBase
{
public:
MyBase() { }
virtual run() = 0;
}
class VariantA : public MyBase
{
public:
VariantA () { }
virtual run()
{
// Run code specific to hardware Variant-A
}
}
class VariantB : public MyBase
{
public:
VariantB () { }
virtual run()
{
// Run code specific to hardware Variant-B
}
}
void main()
{
MyBase* variant;
uint_8 switchValue = readSwitchValue();
switch(switchValue)
{
case 0:
variant = new VariantA();
break;
case 1:
variant = new VariantB();
break;
}
variant->run();
}
现在这工作得很好。我读取了硬件值并使用 switch 语句来创建新的相应类。
问题是我必须处理很多变体。目前大约有 15 个,有可能在不久的将来再增加 20-30 个。我真的开始鄙视运行数百行的 switch 语句,所以我真的在寻找更好的方法来做到这一点,可能是通过模板。
我希望能够使用我的硬件值来查找类型并使用该类型来创建我的新对象。理想情况下,当我添加一个新变体时,我会创建新类,将该类类型添加到我的查找表中,并使用它匹配的硬件值,这样就很好了。
这可能吗?这里有什么好的解决方案?