2013-07-25 4 views
4

에서 으로 반환합니다. 매트릭스 템플릿에 * 연산자에 과부하를 걸기 위해 몇 가지 함수 템플릿을 작성했습니다. 나는 doublecomplex<double> 타입의 행렬로 많은 작업을한다. 올바른 형식을 반환하는 단일 템플릿 함수를 작성할 수 있습니까? 예를 들어 : double 또는 complex를 템플릿 함수

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

나는 T*U의 자연적인 결과에 의해 결정되는 반환 형식 V을하고 싶습니다. 이것이 가능한가?

편집 : 나는 여기에 해당하는 추가 정보를 제공 답변을 받았다 물었다

속행 question.

+0

이 -이에 액세스 할, 또는 이전 버전을 사용을 ? – wlyles

+0

g ++ 4.7.3을 통해 C++ 11에 액세스 할 수 있습니다. 이 표준은이 컴파일러에서 아직 시험 적으로 사용되고있는 것으로 보입니다. @jrok의 대답은 저에게 효과적입니다. C++ 11 기능에 대한 지원이 시간이 지남에 따라 향상 될 것으로 기대되거나 이러한 기능 중 일부가 사라질 위험이 있습니까? – OSE

+0

@OSE : C++ 11을 실험적으로 지원할뿐만 아니라 컴파일러도 없습니다. 코드를 깨뜨릴 수있는 C++ 11 지원에는 변경 사항이 없습니다. –

답변

4

C++ 11에서는 다른 함수 선언 구문을 사용할 수 있습니다 : 이것은 아마 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