2
部分テンプレートの特殊化に問題があります。C++で部分テンプレートの特殊な特殊化を選択できません
私はこの小さなヘルパーテンプレートと部分的な特殊化があります。
template<typename T>
struct ctor_std_vector_get
{
static_assert(false,"ERROR");
};
template<typename T>
struct ctor_std_vector_get<const std::vector<T>>
{
static const T& get(const T& x){
return x;
}
};
をそして、私はそれをこのようなものを使用します。ときに私
template<typename T>
class container
{
public:
container(const std::vector<T>& inp):
{
alloc();
for(const T& t : inp){
const T& x = ctor_std_vector_get<T>::get(t);
}
}
}
をしかし、私は、コンパイル時に、私は、static_assertを打ちます部分的な専門化が必要です。部分的な特殊化が一致した場合、それは基本テンプレートの前に選択されるため、私は何か間違ったことをしたと思います。どうしましたか?
ご返信ありがとうございます。 私はcppreferenceを読んでいるというアイデアは、基本テンプレート(static_assertを持つテンプレート)が見つかると、コンパイラは(部分的に)特殊化を探します。その中で私が必要とする部分的な特殊化はあります –
あなたのアイデアは絶対に100%正しいです。私の質問に答えようとすると、テンプレートパラメータが 'int'であり、' std :: vector 'ではなく、デフォルトテンプレートが' T'が 'int'なので、あなたの答えになるでしょう。 –
もう一度ありがとう。私はそれを持っていると思う、ctor_std_vector_get>。しかし、今私はフォローアップの質問があります。これが動作しても、私はまだstatic_assertを取得しますが、コンパイルされていない基本テンプレートではありませんか? –