模板类型转换

Cem*_*ncu 0 c++ templates

我正在构建一个矩阵模板.有运营商,功能和所有工作正常.除非我尝试将双类型矩阵转换为int类型矩阵(反之亦然).=运算符无法定义,因此无法为类外部的basic_Matrix2D和basic_Matrix2D覆盖它.我知道我可以在class =运算符中编写来转换,但在这种情况下会有两个=运算符具有相同的参数.当使用double作为模板参数时,从double转换将与从模板参数转换相同.类定义如下,可以从SourceForge访问代码

template <class _T> class basic_Matrix2D {

}
Run Code Online (Sandbox Code Playgroud)

我还记得另一个关于模板的问题,转换为模板类型指针的工作原理,而转换为模板类型却没有.这可能是特定于编译器的.观察:

operator _T() {
   return something;
}

operator _T*() {
   return somethingelse;
}
Run Code Online (Sandbox Code Playgroud)

提前谢谢,
Cem

Gre*_*ers 5

你的问题很不清楚,但是制作运算符并没有错:这样的事情:

// incomplete, but you get the idea
template<class U>
basic_Matrix2D<T> & operator=(const basic_Matrix2D<U> &x)
{
    rows = x.rows;
    cols = x.cols;
    data = new T[rows * cols];
    for (size_t i = 0; i < rows * cols; ++i)
        data[i] = x.data[i];
}
Run Code Online (Sandbox Code Playgroud)

这将允许您从表达式T t; t = U();良好形成的任何矩阵中进行分配.如果你不能,它将无法编译.您还可以包含一个简单的basic_Matrix2D<T> & operator=(const basic_Matrix2D<T> &);赋值运算符 - 也许您可以获得一些额外的效率或其他东西.