Позвоните конструктору неизвестных детей - PullRequest
1 голос
/ 13 августа 2010

Я хочу вызвать конструктор;

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 ]

2 голосов
/ 13 августа 2010

Вы не можете этого сделать. Как initShader узнает, какой дочерний конструктор вызывать, когда он знает только базовый класс?

Я думаю, что вы хотите здесь, это шаблонная функция:

template <typename T>
void _engine::initShader(T ** inShader) 
{ 
    *inShader = new T(inputdata for the construcor) 
}
1 голос
/ 13 августа 2010

Хорошая идея, но нет поддержки для получения точного типа указателя во время выполнения.

В вашем методе initShader тип inShader имеет тип anAbstractClass**, и нет способаполучить информацию о том, что это был указатель на указатель на производный класс перед вызовом метода.

Так что вам нужно изменить свой код, возможно, вы можете использовать какую-то Фабрику или что-то вроде этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...