Я пишу некоторые шаблоны функций для перегрузки *
оператор для матричного класса. Я много работаю с матрицами типа 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
, Это возможно?
РЕДАКТИРОВАТЬ:
Продолжение вопрос что я спросил полученные ответы, которые предоставляют дополнительную информацию, применимую здесь.
В 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>() )
{
//...
}
Других решений пока нет …