这部分与这个 SO question 有关。
我有两个类,它们都是模板化的,例如:
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
。不幸的是,我不能只是 forward-declare Derived
,因为它会导致另一个错误variable 'Derived d ' has initializer but incomplete type
。
从我上面提到的 SO 问题中,我了解到编译器需要了解所有模板参数才能正确前向声明它。但是很明显,我不能只是将Derived
声明向上移动,因为它会导致完全相同的问题,反之亦然。
有没有办法做到这一点?