创建一个C ++模板函数,该函数将返回特定大小的std :: array

时间:2019-05-08 15:01:03

标签: c++ templates c++17

我正在使用C ++ 17创建具有以下输入结构linspase的标题为linspace(double upper, double lower, int size)的函数。该函数应在sizelower之间创建upper等间距的数字。对该功能进行编程很容易;但是,我希望它创建一个std::array<double, size>,在该函数中,函数将通过函数调用确定数组大小,并传回数据类型std::array<double, size>。我知道模板是执行此操作的唯一方法,但是我不确定如何构建模板。在一般的伪代码中,我认为它看起来像这样。

template <typedef T, size_t size>
T linspace(double lower, double upper, int num)
{
    /* ... Function meat goes here to create arr of size 
           num of evenly space numbers between lower and upper
    */     
    return arr
}

但是,我知道此模板声明不正确,并且我不确定它的外观。需要明确的是,我希望它返回特定大小的std:;array,而不是std::vector

1 个答案:

答案 0 :(得分:4)

如果(正确地)将数组大小作为模板参数传递,则不需要将其作为函数参数之一,因此:

template <size_t size>
auto linspace(double lower, double upper) -> std::array<int, size>
{
    std::array<int, size> arr{};
    //populate the array ...
    return arr;
}

由于您使用的是c ++ 14,因此可以完全摆脱返回值,并拥有一个像这样的原型:

template <size_t size>
auto linspace(double lower, double upper)

然后您可以像这样使用它:

auto arr = linspace<1>(0, 1);

for(auto a : arr)
{
    std::cout << a << std::endl;
}