2
積分型の部分的な特殊化を作成しようとしています。私の考えは次のように何かをした:特殊なパラメータでenable_ifを使用できないのはなぜですか?
#include <type_traits>
template <typename T>
struct Class {
};
template <typename T>
struct Class<typename std::enable_if<std::is_integral<T>::value, T>::type> {
};
これをただし、次のエラーにつながる:
error: template parameters not deducible in partial specialization:
struct Class<typename std::enable_if<std::is_integral<T>::value, T>::type> {
^
note: 'T'
私は、余分なテンプレートパラメータを使用する場合、それは動作しません:
#include <type_traits>
template <typename T, typename Enable = void>
struct Class {
};
template <typename T>
struct Class<T, typename std::enable_if<std::is_integral<T>::value>::type> {
};
なぜ追加のテンプレートパラメータが必要ですか?
しかし、専門はまた、クラスに解決されません。欲しいものはおそらくされていない、種類別すればよいですか?私はこの2番目のケースがどのようにコンパイラにはっきりしているのか理解できません。 –
あなたは実際に 'Enable = void'を必要としません。それを残しておくとうまくいくはずです。 'template'はすみません。 –
ああ!わかりました!基本ケースはClassです。特殊化はクラスです。したがって、テンプレートパラメータEは現在特殊化されています。 Eがなければ、コンパイラーは部分的な特殊化が実行されていないと思うでしょう(その専門化は基本の場合と同じタイプです)。この光を照らしてくれてありがとう! –