我正试图解决这个问题,而且,这真让我烦恼。我有一个函数将数组或向量转换为复数向量,但是,我不知道该函数如何能够接受双数组以及双向量。我尝试过使用模板,但是,这似乎不起作用。模板
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>
}
我也可以为矢量做同样的事情。我不知道模板是否是正确的方法。
答案 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);
}
就是这样!