我想扩展一个 eigen3 类型如下:
typedef Eigen::Matrix<unsigned char, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> CMatrixImgParent;
class CMatrixImg : public CMatrixImgParent
{
public:
CMatrixImg() : CMatrixImgParent() {}
int Dummy(const char *filename) const {};
};
然后用eigen3做一些算术。
CMatrixImg img1, img2, imgSum;
imgSum = img1 + img2;
但这不起作用,因为我使用 g++ 得到错误:
g++ -o bug.o -c -O2 -I/usr/include/eigen3 bug.cc
bug.cc: In function 'int main(int, char**)':
bug.cc:17:10: error: no match for 'operator=' (operand types are 'CMatrixImg' and 'const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<unsigned char>, const Eigen::Matrix<unsigned char, -1, -1, 1>, const Eigen::Matrix<unsigned char, -1, -1, 1> >')
imgSum = img1 + img2;
^
bug.cc:17:10: note: candidate is:
bug.cc:5:7: note: CMatrixImg& CMatrixImg::operator=(const CMatrixImg&)
class CMatrixImg : public CMatrixImgParent
^
bug.cc:5:7: note: no known conversion for argument 1 from 'const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<unsigned char>, const Eigen::Matrix<unsigned char, -1, -1, 1>, const Eigen::Matrix<unsigned char, -1, -1, 1> >' to 'const CMatrixImg&'
scons: *** [bug.o] Error 1
scons: building terminated because of errors.
Compilation exited abnormally with code 2 at Tue Jul 16 18:31:18
当然,我可以通过像这样的一些显式转换来解决这个问题:
(*(CMatrixImgParent*)&imgSum) = img1 + img2;
但这非常难看。
我可以在类定义中放置任何简单的代码来解决对这种类型转换的需求吗?