任意双精度容器的模板语法是什么?

时间:2018-11-23 11:44:45

标签: c++ c++11 templates

我有一个根据策略对值进行四舍五入的函数

double round(double f, Policy p);

我现在要做的是构建一个只能应用于double容器的版本(由于舍入的方式,没有其他类型的容器是没有意义的。)

template <class Iterable>
Iterable<double> round(
    Iterable<double> y, Policy p){
    for (auto&& e : y){
        e = round(e, p);
    }
    return y;
}

我知道我的模板语法不正确,但是应该是什么?

1 个答案:

答案 0 :(得分:3)

您需要使用模板模板参数:

#include <vector>

template <template <typename...> class Container, typename T>
auto round(Container<T> y){
    for (auto&& e : y){
        // ...
    }
    return y;
}

int main()
{
    std::vector<double> vec = {1.1, 2.2};
    std::vector<double> rounded = round(vec);
}

live on coliru