SubClass が SuperClass から継承しているクラス SuperClass と Subclass があります。
SuperClass には、値がそれを使用する SubClass に依存する定数プロパティがあります。ただし、スーパークラスには他のメソッドも使用しているため、スーパークラスで宣言する必要がありますが、インスタンス化されたサブクラスの型に応じて定数の値が変化するため、サブクラスで初期化する必要があります。
SO に関する以前の質問から、これに対する最善の解決策は特性クラスを使用することだとわかっています。ただし、そのようなソリューションを使用すると、コードに大幅な変更が必要になります。したがって、ここに示すアプローチを選択しました。
SuperClass.h
#ifndef SUPERCLASS_H
#define SUPERCLASS_H
#include <string>
template <class T, class P>
class SuperClass
{
public:
typedef T type;
typedef P position;
static const position NULLPOSITION;
};
#endif
SubClass.h
#ifndef SUBCLASS_H
#define SUBCLASS_H
#include <string>
#include "SuperClass.h"
template <class T>
class SubClass:public SuperClass<T,int>
{
};
template<class T>
const typename SuperClass<T,int>::position SuperClass<T,int>::NULLPOSITION=0;
#endif
main.cpp
#include <cstdlib>
#include <iostream>
#include "SubClass.h"
using namespace std;
int main(int argc, char *argv[])
{
SubClass<int> subClass;
system("PAUSE");
return EXIT_SUCCESS;
}
コンパイルすると、
invalid use of undefined type `class SuperClass<T, int>
と
declaration of `class SuperClass<T, int>
エラー。問題は何ですか?