怎样根据一个类变量的类型创造一个对象!(急)(100分)

  • 主题发起人 主题发起人 qhliaok
  • 开始时间 开始时间
Q

qhliaok

Unregistered / Unconfirmed
GUEST, unregistred user!
各位,也许我在标题中没有说清楚,实际上我是想这样做:

class base //基础类
{
//xxxxxx
//xxxxx
}
class sub1 :base //继承类,这样的继承类有几十个。
{
//------
}

class sub2 :base
{
//-----
}

现在我想定义一个变量
base *test[10];
sub1 *test1;
sub2 *test2;
......

test[1]=test1;
test[2]=test2;

我想通过程序自动得到test的变量的对象类型,
然后生成一个实例:
也就是说,不通过 test1=new sub1()
的方法
而是使用类似这样的语句
test1= new (*test).ClassType()
当然,上面的语句无法编译。

请高手指教!

 
怕是没有什么蛮好的方法
new 后要的一个构造函数,classtype返回的是类名,其它函数中也没有发现有得到构造函数入口的
 
template <class T>
void Hack(T Instance)
{
T AnotherInstance;
AnotherInstance = new T;
delete AnotherInstance;
}

怎么样?
 
template <class T>

Sorry, 刚才打漏了。
 
Delphi中可以实现,不过在C++中我就不知道了。看下面代码,我运行过的
TFormClass=class of TForm;

var
MainForm: TMainForm;
vF:array[1..10] of TFormClass;

implementation

uses Unit1;

{$R *.DFM}

procedure TMainForm.Button1Click(Sender: TObject);
begin
vf[1]:=TFormClass(Form1.ClassType);
with vf[1].create(nil) do
try
showmodal;
finally
free;
end;
end;
 
因为子类是你从基类继承下来的,你可以在基类中加一个标识,如字符串型,你在了类构造
时对其赋值,你就可以区分了。至于你的要求我用Delphi试了一下没找到好方法, 但我觉
得你可以看一下ClassInfo这个属性
 
不想通过标示值进行判断,因为我可能有上百种子类,如果逐一判断,代码太多。

template 我还需要看一下书,呵呵,给了我一个新的思路。
 
能不能换个做法, 比方给基类加一个Clone()的虚拟函数, 在每个子类中实现

比方
Sub1&amp
Sub1::Clone()
{
return ( new Sub1 );
}

test[1] = new Sub1;

调用 tes1->Clone()
就可以得到一个Sub1类型的实例.

 
支持RTTI的语言都可以满足你的需求,如:Delphi、VC等。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部