2013-07-25 58 views
4

我在寫一些函數模板來爲矩陣類重載*運算符。我使用doublecomplex<double>類型的矩陣做了很多工作。是否可以編寫一個返回正確類型的模板函數?例如:從模板函數返回雙精度或複數<double>

template<class T, class U, class V> 
matrix<V> operator*(const T a, const matrix<U> A) 
{ 
    matrix<V> B(A.size(1),A.size(2)); 
    for(int ii = 0; ii < B.size(1); ii++) 
    { 
     for(int jj = 0; jj < B.size(2); jj++) 
     { 
      B(ii,jj) = a*A(ii,jj); 
     } 
    } 
    return B; 
} 

我想返回類型V通過的T*U的自然結果來確定。這可能嗎?

編輯:

,我問收到的是,這裏提供了適用的附加信息的答案的後續question

+0

這也許可以用C++ 11做 - 你有機會獲得這一點,或者你使用的是舊版本? – wlyles

+0

我可以通過g ++ 4.7.3訪問C++ 11。看起來這個標準對於這個編譯器仍然是實驗性的。 @jrok的答案適用於我。對C++ 11功能的支持預計會隨着時間的推移而改進,或者是否有這些功能可能會消失? – OSE

+0

@OSE:沒有編譯器不僅對C++ 11有實驗支持。 C++ 11支持將不會導致您的代碼被破壞。 –

回答

4

在C++ 11,可以使用替代函數聲明語法:

#include <utility> // for declval 

template<class T, class U, class V> 
auto operator*(const T a, const matrix<U> A) 
    -> decltype(std::declval<T>() * std::declval<U>()) 
{ 
    //... 
} 
+0

感謝您的快速響應!這個答案完美無缺。 – OSE