在不同的数据类型之间交替

时间:2013-07-03 20:28:12

标签: c++ templates vector

我正试图解决这个问题,而且,这真让我烦恼。我有一个函数将数组或向量转换为复数向量,但是,我不知道该函数如何能够接受双数组以及双向量。我尝试过使用模板,但是,这似乎不起作用。模板

template<typename T>
vector<Complex::complex> convertToComplex(T &vals)
{

}


Value::Value(vector<double> &vals, int N) {

};


Value::Value(double *vals, int N) {


};

我希望的是:

int main()
{
   double[] vals = {1, 2, 3, 4, 5};
   int foo = 4;
   Value v(vals, foo); // this would work and pass the array to the constructor, which would
                  // then pass the values to the function and covert this to a 
                  //   vector<complex>
}

我也可以为矢量做同样的事情。我不知道模板是否是正确的方法。

2 个答案:

答案 0 :(得分:3)

您可以使您的函数和构造函数成为一个带有两个迭代器的模板:

template<typename Iterator>
vector<Complex::complex> convertToComplex(Iterator begin, Iterator end)
{

}

class Value
{
 public:
  template <Iteraror>
  Value(Iterator begin, Iterator end)
  {
    vector<Complex::complex> vec = comvertToComplex(begin, end);
  }
  .... 
};

然后

double[] vals = {1, 2, 3, 4, 5};
Value v(std::begin(vals), std::end(vals)); 

std::vector<double> vec{1,2,3,4,5,6,7};
Value v2(v.begin(), v.end());

我省略了foo,因为我不清楚它的作用是什么。

答案 1 :(得分:2)

如果您只想支持双打,则无需在此处定义模板功能。 你应该这样做,它更简单:

vector<Complex::complex> convertToComplex(const double* array, size_t len)
{
  // ... your implementation
}

vector<Complex::complex> convertToComplex(const vector<double>& v, size_t len)
{
  return convertToComplex(v.data(), len);
}

就是这样!