gpt4 book ai didi

c++ - 按编号确定对象类型

转载 作者:太空宇宙 更新时间:2023-11-04 14:18:42 25 4
gpt4 key购买 nike

我有一个包含许多派生类型的类,并且我有一个与每个派生类关联的唯一编号。有没有一种简单的方法可以将数字与派生类型相匹配?

一些伪代码:

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,如果它很重要的话。

最佳答案

您可能想要的是 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();
...
}

关于c++ - 按编号确定对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9254443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com