簡単な質問があります。私は C++ コードを書いています。同じファイルに 2 つのクラスがあります。一方は他方を継承しており、テンプレートを使用してクラスをより一般的にしようとしています。
基本クラスのファイルは次のとおりです。
template<class E> // this is the class we will execute upon
class Exec{
protected:
typedef void (*Exe)(E*); // define a function pointer which acts on our template class.
Exe* ThisFunc; // the instance of a pointer function to act on the object
E* ThisObj; // the object upon which our pointer function will act
public:
Exec(Exe* func, E* toAct){ThisFunc = func; ThisObj=toAct;}
Exec(){;} // empty constructor
void Execute(){ThisFunc(ThisObj);} // here, we pass our object to the function
};
そして、継承されたクラスは次のとおりです。
template<class E> // this is the class we will execute upon
class CondExec : protected Exec<E>{ // need the template!
protected:
typedef bool (*Cond)(E*); // a function returning a bool, taking a template class
Cond* ThisCondition;
public:
CondExec(Exe* func, E* toAct,Cond* condition): Exec<E>(func,toAct){ThisCondition=condition;}
void ExecuteConditionally(){
if (ThisCondition(ThisObj)){
Execute();
}
}
};
ただし、これを試すと、次のエラーが表示されます。
executables.cpp:35: error: expected `)' before ‘*’ token
executables.cpp: In member function ‘void CondExec<E>::ExecuteConditionally()’:
executables.cpp:37: error: ‘ThisObj’ was not declared in this scope
executables.cpp:37: error: there are no arguments to ‘Execute’ that depend on a template parameter, so a declaration of ‘Execute’ must be available
Exec (つまり、基本) クラスが適切に宣言されていないようです。継承されたクラスに基本クラスの typedef とインスタンス変数を含めると、これらのエラーは発生しません。ただし、基本クラスからすべてを含めると、継承を使用しても意味がありません!
一部の人が推奨しているように(つまり、class Base;)、基本クラスの「宣言」を試みましたが、それは役に立たないようです。
私はこれについて数時間グーグルフーを行ってきました。誰かに何かアイデアがあれば、それは素晴らしいことです!