Вернуть double или complex<double> из функции шаблона

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

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

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

1 ответ

Решение

В 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>() )
{
   //...
}
Другие вопросы по тегам