包含类类型的C ++类型

时间:2013-05-11 19:14:08

标签: c++

在Free Pascal中,我可以创建一个类,它从指定的类类型创建对象。例如:

type
  TBaseClass = class
  end;

  TBaseClassType = class of TBaseClass;

  TFooClass = class(TBaseClass)
  end;

  TBarClass = class(TBaseClass)
  end;

现在我可以声明变量:

MyClassType: TBaseClassType;
MyObject: TBaseClass;

用法:

// This will create instance of object TFooClass
MyClassType := TFooClass;
MyObject := MyClassType.Create;

// ... and here of TBarClass
MyClassType := TBarClass;
MyObject := MyClassType.Create;

我怎样才能在C ++中做类似的事情?如何在一些var中存储类类型并从中创建对象(当然也称之为构造函数)

此致

1 个答案:

答案 0 :(得分:0)

简短的回答是:你不能因为类型不是C ++中的第一类对象。

答案越长:在某些情况下,您可以使用模板实现相同的目标。

如果您有一个要在类类型上进行参数化的函数,则可以使用模板函数。因此,例如,使用以下内容可以实现类似于上述内容的内容:

template <class MyClassType>
void doSomething() {
  MyClassType myObject = MyClassType();
  /* Do something with myObject */
}

doSomething<TFooClass>();
doSomething<TBarClass>();

因此,简而言之,您在上面提供的示例无法直接转换为C ++(因为您无法定义变量来保存类型),但根据实际问题,可能会编写类似的代码。