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,但不是没有编译基础模板? –