我有一个包含许多派生类型的类,并且我有一个与每个派生类关联的唯一编号。是否有一种简单的方法可以将数字与派生类型匹配?
一些伪代码:
class foo{
public:
virtual int bar(int) = 0;
}
class fan:foo{
public:
int bar(int num){ return num * 5; )
}
class fawn:foo{
public:
int bar(int num){ return num * 9; );
}
int main(){
vector<foo*> obj;
for( int i = 0; i < 100; i ++ ){
int num = rand() % 2;
if( num == 0 )
obj.push_back( new fan() );
if( num == 1 )
obj.push_back( new fawn() );
}
}
这就是我想要的,但我有两个以上的课程,我计划增加更多。有没有办法以不那么冗长的方式做到这一点?
我正在使用MinGW,如果它很重要的话。
答案 0 :(得分:0)
你可能想要的是factory pattern。基本上,你会做这样的事情:
class foo
{
...
static foo* Create(int num);
}
foo* foo::Create(int num)
{
foo* instance;
switch (num)
{
case 0:
instance = new fan();
break;
case 1:
instance = new fawn();
break;
...
}
return instance;
}
没有办法摆脱枚举,但至少这种方式你只需要构造一次,然后你可以在任何地方使用它foo
。
编辑:我个人喜欢上面的风格但是更紧凑的版本是
foo* foo::Create(int num)
{
if (num==0) return new fan();
if (num==1) return new fawn();
...
}
答案 1 :(得分:0)
您可以为派生类型的唯一标识符创建枚举。
然后,您可以在派生类中包含一个包含此枚举的字段,您可以在各自的构造函数中设置该字段。这样你就可以只用一个函数来检索它的类型。