从模板函数返回双精度或复数<double>

Return double or complex<double> from template function

本文关键字:gt lt double 函数 返回 双精度      更新时间:2023-10-16

我正在编写一些函数模板来重载矩阵类的*运算符。我对doublecomplex<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;
}

我希望返回类型VT*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>() )
{
   //...
}