2013-07-03 55 views
3

我試圖弄清楚這一點,而且這真的讓我煩惱。我有一個函數可以將數組或向量轉換爲複數的向量,但是,我不知道函數如何能夠接受雙數組以及雙向量。我已經使用模板試過了,但是,這似乎並沒有work.template不同數據類型之間的交替

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

這是實際的代碼嗎?當只有兩個參數時,你只傳遞一個參數給Value的構造函數。 –

+0

@CaptainObvlious我的不好。這只是文本代碼。對不起,感到困惑 – Phorce

回答

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,因爲這對我來說並不很清楚它的作用是什麼。

+0

感謝您的回覆。但是,'template '存在嗎? – Phorce

+0

@Phorce不,你必須按照我在這裏展示的內容寫下它。 – juanchopanza

+1

@Phorce'Iterator'只是一個模板參數。如果你願意,你可以稱它爲「弗雷德」。只需看一些示例函數模板即可獲得靈感。 – juanchopanza

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); 
} 

這就是它!

相關問題