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,但不是沒有編譯基礎模板? –