如何在C ++中编写一个带有可变数量的double向量的函数?

时间:2014-12-23 06:39:13

标签: c++ arguments stdvector argument-passing variadic-functions

我正在尝试将不同数量的vector<double>变量合并到vector< vector<double> >中。我尝试使用cstdarg库。它抛弃了

  

错误:无法通过'...'接收非平凡可复制类型'class myvectortype'的对象;

,其中

  

typedef vector&lt;双&gt; myvectortype;   typedef vector&lt; myvectortype&gt; datavectortype;

这是函数的定义

datavectortype ExtractData::GetPixelData(int num, ...)
{
        datavectortype data_temp;
        va_list arguments;
        va_start (arguments, num);
        for(int i = 0; i<num; i++)
        {
                data_temp.push_back(va_arg ( arguments, myvectortype));
        }
        va_end ( arguments );
        return data_temp;
}

可以做些什么来解决这个问题,谢谢。

1 个答案:

答案 0 :(得分:3)

从C ++ 11开始,你已经可以做到了

std::vector<double> v1{1}, v2{2}, v3{3, 4};
std::vector<std::vector<double>> v {v1, v2, v3};

但是如果你想为它做一个函数,你可以使用variadic template:

template <typename T, typename ...Ts>
std::vector<T> make_vector(const T& arg, const Ts&... args)
{
    return {arg, args...};
}

因此使用它:

std::vector<double> v1{1}, v2{2}, v3{3, 4};
std::vector<std::vector<double>> v = make_vector(v1, v2, v3);