C++类转换运算符
C++ Class Conversion Operator
我有两个类,一个是矩阵,然后是从矩阵类继承的对角矩阵。
显然,从Diagonal转换为Matrix很容易,但转换回来需要转换。
class Diagonal : public Matrix<T>
{
operator Matrix<T>() const;
};
存在于我的代码中,我认为应该转换它。总的来说,我有:
Matrix<float> theMatrix(size,size);
Diagonal<float> theDiag(size,size);
theDiag = theMatrix;
除了转换,一切都很好,告诉我:
no known conversion for argument 1 from ‘Matrix<float>’ to ‘const Diagonal<float>&’
有什么建议吗?谢谢
您的代码
class Diagonal : public Matrix<T>
{
operator Matrix<T>() const;
};
定义了从Diagonal<T>
到Matrix<T>
的转换,而您的作业期望从Matrix<T>
到Diagonal<T>
的转换。
你是不是打算写这个?
class Matrix<T>
{
operator Diagonal<T>() const;
};
现在,即使这是有效的*(我对此表示怀疑,因为它会导致循环依赖),我也不确定从语义角度来看它是否有意义并非每个矩阵都是对角矩阵,因此从矩阵转换为对角矩阵不能保留所有数据。从设计的角度来看,在这种情况下使用隐式转换是个坏主意。
*一种替代方案是将operator=(const Matrix<T>&)
定义为Diagonal<T>
。
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 构造函数和转换运算符之间的重载解析
- 分配给转换运算符失败-C++
- 转换运算符不适用于sleep_until
- 尝试使用算术运算符阻止隐式转换
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- 是否可以将带有字符串化运算符的宏转换为 constexpr?
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- 继承模板化转换运算符
- 将 OR 逻辑运算符从 C++ 转换为 Fortran
- 模板转换运算符在 clang 6 和 clang 7 之间的区别
- 如何在C++中正确重载运算符转换字符*?
- 将私有结构哈希器运算符转换为静态
- 混合类型的Boost运算符-转换和私有成员
- 如何将 c++ 运算符转换为 Java
- 运算符转换,GCC 和 clang:哪个编译器是正确的
- 将 istream 运算符>>转换为 istream getline
- 在C++中,将任意在位运算符转换为一元运算符
- 将运算符转换为 std::复杂<double>
- 为什么按位否定运算符"~"转换为 int?(从"int"转换为"无符号字符"可能会改变其值)