调用未知孩子的构造函数

时间:2010-08-13 13:49:48

标签: c++ constructor abstract-class

我想调用构造函数;

class anAbstractClass
{
 public: anAbstractClass(inputdatatype){/*blablabla*/}
};

class aChield : public anAbstactClass
{
/*
...
*/
}

void _engine::initShader(_anAbstractClass** inShader)
{
    *inShader = new /*???*/(inputdata for the construcor)
}

aChield* theChield;
_engine* myEngine = new _engine();
myEngine->initShader(&theChield);

那么,如何在/ ??? /中调用构造函数? 提前回答!

2 个答案:

答案 0 :(得分:2)

你做不到。 initShader如何知道哪个子构造函数是基类?

我认为你想要的是一个模板化的功能:

template <typename T>
void _engine::initShader(T ** inShader) 
{ 
    *inShader = new T(inputdata for the construcor) 
}

答案 1 :(得分:1)

好主意,但是没有支持在运行时获取指针的确切类型。

initShader方法中,inShader的类型为anAbstractClass**,并且在方法调用之前无法获取指向派生类指针的信息。

所以你需要更改你的代码,也许你可以使用一些工厂或类似的东西。