C++:数组的函数模板特化

标签 c++ arrays templates

我尝试编写一个函数来对一系列数据执行任何操作。

//For stl containers
template<typename T>
void foo(T x){
    for(auto iter=x.begin();iter!=x.end();++iter)
        do_something(*iter);
}

这个函数是为了操作STL容器而设计的,没问题。但我想要 C 数组的另一个版本。所以我尝试了这个:

//For C-array
template<typename T,size_t N>
void foo(T x[N]){
    //blabla
}
//Error

我读过 "Partial template specialization for arrays" (以及其他几篇相关文章),但它适用于类模板。而且我也知道,当你专门化一个函数模板时,你实际上是在重载它。无论如何,那篇文章中的解决方案无法在这里实现。

有任何(或可能没有)方法可以做到这一点吗? :-) 谢谢你容忍我糟糕的英语,谢谢你的帮助。

最佳答案

你错过了对数组的引用:

template<typename T, size_t N>
void foo(T (&x)[N]){
    //blabla
}

顺便说一句,在您的情况下,您可以在一般情况下简单地使用 (const) 引用:

template<typename T>
void foo(T& x){
    using std::begin;
    using std::end;

    for (auto iter = begin(x); iter != end(x); ++iter)
        do_something(*iter);
}

甚至更好:

template<typename T>
void foo(T& x){
    for (auto&& e : x)
        do_something(x);
}

关于C++:数组的函数模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26217198/

相关文章:

arrays - 如何通过在 Swift 中增加索引来在数组中插入值?

javascript - 限制特定值javascript之间的字符串拆分

C++ : operator<< fails to compile

c++ - 只有 MSVC 能够编译这段代码

java - 2D Array(Double) 排序给出 0 个值

c++ - Concepts-Lite iterator comparison 比较值

c++ - 工作线程队列的最轻同步原语

c++ - 复制列表初始化是否在概念上调用复制构造函数?

c++ - operator++ 作为后缀和前缀都不适用于 clang

c++ - 为什么 std::optional<boost::variant<A, bool>> 没有从 `std::optional<A>` 成功构造?