テンプレートを使用して、テンプレートで使用される特定のクラスに特定のメンバー変数があると想定できることを知っています。ただし、テンプレートクラスに特定のメンバー変数または関数が必要であることを明示的に宣言する方法があるかどうか疑問に思いました。
私はこの例のようなものについて話している:
template <typename T>
class Assume
{
int value;
Assume(T* object) : value(T->AssumedMember) {};
};
class A
{
int AssumedMember;
A(int val) : AssumedMember(val) {};
};
int main()
{
A* a = new A(5);
Assume<A> assumer(a);
return 0;
}
少なくともMSVC++で使用されているコンパイラでは、この例に似たものが問題なくコンパイルされるはずです。
テンプレートまたはクラスで使用するために、タイプ名TのTにメンバー変数AssumedMemberがあることを宣言する方法があるかどうか疑問に思っていました。今のところ、Assumeが適切な必須メンバー(変数、関数、または演算子)を持つクラスで使用された場合にのみ機能することを実際に理解する唯一の方法は、コンパイルして指定されたコンパイラエラーを確認する必要があります。テンプレート全体を自分で読んで、まだ定義されていない余分なものが使用されているかどうかを判断してください。
(また、無関係なことに、宣言のブロック全体をテンプレートとして宣言する方法を知っている人はいます
template <typename T> { /*class... member definitions, etc..*/ }
か?同じテンプレートを使用するために定義のブロック全体を宣言するようなものを使用するかのように?)