EDIT:私が休暇に入ったときに提案されたソリューションをテストする機会は実際にはありませんでした。クラステンプレートを担当していたので、クラステンプレート自体で定義された型を使用する必要がなくなりました。クラステンプレートの特殊なクラスの内部型を使用
皆様のおかげで彼らの助けになりました。一言で言えば
- と私の文言を修正すること自由に感じ、テンプレートは、まだ私にはブードゥー教のビットです - 私は(protected
)struct
またはクラス内で定義された#typedef
を使用することができるかどうかを知る必要があり私の専門クラスのテンプレート。たとえば:
これはクラステンプレートです:
私は完全にT = VAL
のために特化する必要が
template<typename T>
class A : public C<T>
{
protected:
struct a_struct { /* Class template implementation, doesn't depend on T */ };
void foo(a_struct a);
};
:
template<>
class A<VAL> : public C<VAL>
{
void foo(a_struct a)
{
// My implementation of foo, different from the class template's
}
};
私はこのような何かを行う場合は、しかし、コンパイラはそのa_struct
を不平を言います私の専門クラスでは定義されていません。私は専門化し、クラステンプレートから継承したが、それは...乱雑になった。
私はいくつかの解決策を見ましたが、それらのすべてがクラステンプレートの変更に関連していました。これは簡単にはできません(別のチーム)。
思考?
テンプレートの 'typename'の必要性が説明されているので、他の多くの質問を見てください:http://stackoverflow.com/questions/610245/where-and-why-do-i-have-to -put-the-template-and-typename-keywords – JSF
申し訳ありませんが、私は最初あなたの質問に誤解しました。基本クラスの型を継承するのではなく、独自の特殊化されていないバージョンを継承したいとします。 – JSF
オリジナルを "変更"せずに偽のベースを作成できると思います。オリジナルを継承し、擬似ベースを育てるクラスを作成すると、擬似ベースは型定義をオリジナルの保護領域から独自の保護領域に盗むことができます。その後、その偽ベースを専門化の真の基盤として使用します。 – JSF