繁体   English   中英

有没有一种方法可以为std :: array创建功能模板专业化

[英]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) 

这使您的函数可以灵活使用容器类型:可能不需要知道它是listdeque还是array

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM