[英]Is there a way to create function template specialization for std::array
我有一个功能模板
template<typename T>
void output(T& value)
{
}
有没有一种方法可以为输出std :: array对象创建专用化? 是的,我知道,不同大小的数组是不同的类型。 )我只是希望c ++ 11中有办法
template<class T, unsigned N>
void output(std::array<T,N>& value){
}
因为不鼓励专业化,所以您将要使用它。 而且,您不能部分专门化功能模板。
您不能对所有数组都进行专门化,这需要模板的“部分专门化”。 模板的完全专业化会固定所有模板参数的值(在这种情况下,只有一个T
,因此完全专业化只能覆盖一种类型来代替T
)。 部分专业化涵盖模板参数的多个可能值(在这种情况下,我们要覆盖任何std::array<U,N>
代替T
),因此部分专业化具有自己的模板参数。
C ++允许对类模板进行部分专业化,但不允许对功能模板进行部分专业化。
相反,您可以使其过载。 您定义了另一个具有相同名称和不同参数的功能模板:
template <typename T, size_t N>
void output (const std::array<T,N> &arr); // I guess "const" by the function name
您需要重载 ,而不是专门化(功能模板只有完全专门化)。
template <typename T, size_t N>
void output (std::array<T,N> &arr);
但是,您不允许将其放入namespace std
。 而且,如果仅输出数据,则不应传递非常量引用。
但是,请遵循标准库所遵循的路线,而应使用迭代器:
template <typename Iter>
void output (Iter it, Iter end)
这使您的函数可以灵活使用容器类型:可能不需要知道它是list
, deque
还是array
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.