クラスをテンプレートに変換したいのですが、このクラスはタイプ名Tのデータにアクセスする必要があります。この場合、タイプ名Tはオブジェクトまたはオブジェクトへのポインターである可能性があります。テンプレート内で、ポインターとオブジェクトのどちらを扱っているかを確認するにはどうすればよいですか?
Boostが使えません。
テンプレートの特殊化を使用します。まず、テンプレートパラメータを通常のタイプとして扱うテンプレートを作成します。
template <typename T>
struct Foo {
T t_;
Foo () { std::cout << "regular version" << std::endl; }
};
次に、型へのポインターである場合のテンプレートを特殊化します。
template <typename T>
struct Foo<T *> {
T *t_;
Foo () { std::cout << "pointer version" << std::endl; }
};
Foo<int> a;
Foo<int *> b;