Вернуть double или complex & lt; double & gt; из шаблона функции

Я пишу некоторые шаблоны функций для перегрузки * оператор для матричного класса. Я много работаю с матрицами типа double а также complex<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, Это возможно?

РЕДАКТИРОВАТЬ:

Продолжение вопрос что я спросил полученные ответы, которые предоставляют дополнительную информацию, применимую здесь.

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>() )
{
//...
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]