Это частично связано с этим вопросом SO.
У меня есть два класса, оба они шаблонные, например:
class Base
{
public:
template< class T > void operator=(T other)
{
//irrelevant
}
Derived toDerived()
{
Derived d;
//do stuff;
return d;
}
};
class Derived: public Base
{
public:
template< class T > void foo( T other )
{
//do stuff
}
};
Как видите, оба шаблонны, и внутри функции класса Base
мне нужно создать экземпляр Derived
. Конечно, так, как сейчас, я получаю ошибку Derived does not name a type
. К сожалению, я не могу просто объявить Derived
, потому что это приведет к другой ошибке variable 'Derived d ' has initializer but incomplete type
.
Из вопроса SO, который я упомянул выше, я понимаю, что компилятору необходимо знать обо всех параметрах шаблона, чтобы иметь возможность правильно объявить его. Но, очевидно, я не могу просто переместить объявление Derived
вверх, потому что это приведет к точно такой же проблеме, только наоборот.
Есть ли способ сделать это?
Derived
должен иметьfromBase
. - person GManNickG   schedule 28.09.2012;
после определений классов. б. Я согласен с GManNickG - то, что вы сделали, не является хорошим ООП. - person elyashiv   schedule 28.09.2012