【发布时间】:2017-12-14 10:34:30
【问题描述】:
我认为我的问题简单明了:
我有AbstractMatrix的基类和它的子类Matrix,我想做简单的转换:
namespace mtrx {
/* mycode */
class AbstractMatrix {
public:
/* -//- */
operator Matrix ();
/* -//- */
}
class Matrix : public AbstractMatrix {
/* -//- */
}
}
AbstractMatrix.cpp:
AbstractMatrix::operator Matrix(){
return Matrix(data);
}
编译器给出消息:
Matrix.h:39:12: error: expected type-specifier before ‘Matrix’
operator Matrix ();
^
我做错了什么? 是否可以进行这样的转换?我认为是的,因为我只想基于超类创建构造函数,但没有任何无聊的语法,我需要它是隐式的
谢谢
【问题讨论】:
-
我更好奇你为什么需要这样做?运营商应该解决什么问题?难道你不能有一个返回
AbstractMatrix指针的虚拟“getter”函数吗?或者也许使用the CRTP 来了解子类? -
至于您的问题,您确实知道必须在使用符号之前声明(或有时甚至定义)符号?
-
例如对于 foo(Matrix A);如果我在 B 是 AbstractMatrix 的情况下执行类似 foo(B) 的操作,则 B 将转换为 Matrix 类。感谢您的建议,我最近开始学习 C++,我将阅读有关虚函数和 CRTP 的内容,可能会对我有所帮助。
标签: c++ inheritance type-conversion operator-overloading overloading