벡터 (valarrays와 비슷 함)에서 연산을 오버로드하는 것이 좋은 수치 시뮬레이션을 수행하고 있습니다. 예를 들어, 나는C++ 일반화 된 연산자 템플릿
template <typename T>
vector<T> operator*(const vector<T>& A, const vector<T>& B){
//blah blah
}
하지만 내가 벡터의 두 가지 유형에 관한 법률 (잠재적으로) 세 번째 형식을 반환하기 위해이 템플릿을 일반화하려는 경우를 쓸 수 있습니까? 나는. 나는 A와 B는 서로 다른 종류와 다른 구별 유형을 돌려 "A *의 B"상황에서 연산자를 사용하는 경우 위의 실제로 작동합니까, 지금
template <typename T, template U, template V>
vector<V> operator*(const vector<T>& A, const vector<U>& B){
//blah blah
}
을 쓰고 싶어요. 그러나 A와 B가 같은 유형이면 작동하지 않습니다. 물론 각 조합 (예 : T only, T and U only 또는 T, U, V)마다 다른 템플릿을 정의 할 수는 있지만보기에는 엉망입니다. 위에 주어진 T, U, V 다양성의 단일 템플릿 표현식을 사용할 수 있고 "A", "B"및 "A * B"가 모두 동일한 유형 (또는 단지 2 가지 유형?) 나는 A와 B는 별개 상황 "A *의 B"의 연산자를 사용하고 다른 형식을 반환하는 경우
템플릿 인수 공제가 반환 값을 봅니다 (반환 유형에 오버로드 할 수 없음) – sehe