これは、このSOの質問に部分的に関連しています。
私には2つのクラスがあり、どちらもテンプレート化されています。例:
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
、宣言を上に移動することはできません。まったく同じ問題が発生するため、その逆も同様です。
これを達成する方法はありますか?