C++ 无法 select 更正部分模板特化
C++ can't select correct partial template specialization
我在部分模板专业化方面遇到问题。
我有这个小助手模板和部分专业化:
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。我想我做错了什么,因为如果部分专业化匹配,它会在基本模板之前被选中。怎么了?
container(const std::vector<T>& inp):
{
alloc();
for( const T& t : inp){
const T& x = ctor_std_vector_get<T>::get(t);
}
}
假设您将 std::vector<int>
作为参数传递给此函数。
因此,const std::vector<T>&
中的 T
部分将是 int
。简单替换。
现在我们已经确定 T
被 int
替代,您希望 ctor_std_vector_get<T>
或 ctor_std_vector_get<int>
最终使用哪个模板,默认模板,还是专业化?
我在部分模板专业化方面遇到问题。
我有这个小助手模板和部分专业化:
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。我想我做错了什么,因为如果部分专业化匹配,它会在基本模板之前被选中。怎么了?
container(const std::vector<T>& inp):
{
alloc();
for( const T& t : inp){
const T& x = ctor_std_vector_get<T>::get(t);
}
}
假设您将 std::vector<int>
作为参数传递给此函数。
因此,const std::vector<T>&
中的 T
部分将是 int
。简单替换。
现在我们已经确定 T
被 int
替代,您希望 ctor_std_vector_get<T>
或 ctor_std_vector_get<int>
最终使用哪个模板,默认模板,还是专业化?