クラス宣言が与えられた場合
class A {
template <typename T> T foo();
};
A::foo
のさまざまな型 ( int
、...) および型クラス (POD、非 POD)に特化したいと考えていT
ます。std::enable_if
残念ながら、後者には使えないようです。以下はコンパイルされません。
template <> int A::foo<int>(); // OK
template <typename T>
typename std::enable_if<is_pod<T>::value, T>::type foo(); // <<<< NOT OK!
template <typename T>
typename std::enable_if<!is_pod<T>::value, T>::type foo(); // <<<< NOT OK!
この問題はおそらくstd::enable_if<...>
、関数シグネチャの一部であり、内部でそのようなメンバーを宣言していないことが原因A
です。では、型の特性に基づいてテンプレート メンバーを特殊化するにはどうすればよいでしょうか?