C++でテンプレート化されたクラスを継承するクラスを宣言することは可能ですか?基本的には、宣言時に私のテンプレートクラスは常に別のクラスを継承するというヒントをコンパイラに伝えたいと思います。 は多分これが私のために問題である理由いくつかのコードが解消されます:継承リストを持つC++テンプレート宣言
template<typename T>
class GrandparentClass
{
public:
T grandparentMember;
};
//this needs to be only a declaration, since I do not want classes of ParentClass with random T
template<typename T>
class ParentClass : public GrandparentClass<T>
{
};
// this does not work:
//template<typename T>
//class ParentClass : public GrandparentClass<T>;
// this does not either, because then the child class cannot access the variable from the grandparent class
//template<typename T>
//class ParentClass;
template<>
class ParentClass<int> : public GrandparentClass<int>
{
public:
ParentClass()
{
grandparentMember = 5;
}
};
template <typename T>
class ChildClass : public ParentClass<T>
{
public:
void foo()
{
std::cout << grandparentMember << "\n";
}
};
また、私はC++ 11
EDIT使用することはできません。
:を私はこの簡単な方法を見つけました
template<typename T>
class ParentClass : public GrandparentClass<T>
{
public:
ParentClass() { ParentClass::CompilerError(); };
};
クラス内でCompilerError()メソッドを定義していないだけですべてが問題ありません。
はい、動作するはずです。あなたはどこに問題が見えますか? –
いいえ、クラス宣言は 'class foo;'から取ります。テンプレートであろうとなかろうと、ベースクラスを含むことはできません。そしてそれが可能であっても、専門化はまだそれを再び含める必要があります。 – StoryTeller
問題は、定義を 'template class ParentClass:public GrandparentClass ;に変更できないことです。コード内でこれを編集します –
lightxbulb