Eigen 中的转换运算符
Conversion operator in Eigen
我正在尝试为 Eigen::Matrix2d
对象编写自定义转换运算符,但我惨遭失败。下面是精简代码:
#include <iostream>
#include <Eigen/Dense>
struct MatrixView
{
operator Eigen::Matrix2d() const // conversion operator
{
Eigen::Matrix2d tmp;
std::cout << "CONVERSION TRIGERRED\n";
return tmp;
}
};
int main()
{
MatrixView m;
static_cast<Eigen::Matrix2d>(m);
}
我遇到了一个严重的编译时错误,太长了无法在此处列出,从以下内容开始:
error: no matching function for call to 'Eigen::Matrix::_init1(const MatrixView&)'
note: cannot convert 'x' (type 'const MatrixView') to type 'Eigen::Index {aka long int}'
Base::template _init1(x);
Base::template _init1(x);
您可以找到完整的错误消息 here。
我不知道发生了什么,转换运算符很简单,它只是返回一个默认初始化的 Eigen::Matrix2d
。有什么想法吗?
编辑
如果我删除 "explicit" 则转换由复制初始化触发,例如
Eigen::Matrix2d tmp = m; // OK without "explicit"
然而static_cast
仍然失败。
平台详情:
OS X 10.10 Yosemite, Eigen 3.2.6, g++ (MacPorts gcc5 5.2.0_0) 5.2.0, Apple LLVM 版本 7.0.0 (clang-700.0. 72) 目标:x86_64-apple-darwin14.5.0,均编译失败
编辑 2
整个问题的发生实际上是因为我的 link 指向 Eigen_3.3_alpha1 的开发者版本。在 Eigen 3.2.x 它有效。感谢@Matt 的提示!我将关闭问题。
Eigen 有定期制作的开发包。按照 Drop in the comments 的建议显示了如何检查包含哪个版本。 9 月 4 日发布了一个 alpha 版本 returns 版本 3.2.91
。使用 10 月 1 日发布的 3.2.6
版本可以正确编译。代码显示是版本是:
#include <Eigen\src\Core\util\Macros.h>
#include <iostream>
...
std::cout << EIGEN_WORLD_VERSION << "." << EIGEN_MAJOR_VERSION << "." <<
EIGEN_MINOR_VERSION << "\n";
我正在尝试为 Eigen::Matrix2d
对象编写自定义转换运算符,但我惨遭失败。下面是精简代码:
#include <iostream>
#include <Eigen/Dense>
struct MatrixView
{
operator Eigen::Matrix2d() const // conversion operator
{
Eigen::Matrix2d tmp;
std::cout << "CONVERSION TRIGERRED\n";
return tmp;
}
};
int main()
{
MatrixView m;
static_cast<Eigen::Matrix2d>(m);
}
我遇到了一个严重的编译时错误,太长了无法在此处列出,从以下内容开始:
error: no matching function for call to 'Eigen::Matrix::_init1(const MatrixView&)'
note: cannot convert 'x' (type 'const MatrixView') to type 'Eigen::Index {aka long int}' Base::template _init1(x); Base::template _init1(x);
您可以找到完整的错误消息 here。
我不知道发生了什么,转换运算符很简单,它只是返回一个默认初始化的 Eigen::Matrix2d
。有什么想法吗?
编辑
如果我删除 "explicit" 则转换由复制初始化触发,例如
Eigen::Matrix2d tmp = m; // OK without "explicit"
然而static_cast
仍然失败。
平台详情:
OS X 10.10 Yosemite, Eigen 3.2.6, g++ (MacPorts gcc5 5.2.0_0) 5.2.0, Apple LLVM 版本 7.0.0 (clang-700.0. 72) 目标:x86_64-apple-darwin14.5.0,均编译失败
编辑 2
整个问题的发生实际上是因为我的 link 指向 Eigen_3.3_alpha1 的开发者版本。在 Eigen 3.2.x 它有效。感谢@Matt 的提示!我将关闭问题。
Eigen 有定期制作的开发包。按照 Drop in the comments 的建议显示了如何检查包含哪个版本。 9 月 4 日发布了一个 alpha 版本 returns 版本 3.2.91
。使用 10 月 1 日发布的 3.2.6
版本可以正确编译。代码显示是版本是:
#include <Eigen\src\Core\util\Macros.h>
#include <iostream>
...
std::cout << EIGEN_WORLD_VERSION << "." << EIGEN_MAJOR_VERSION << "." <<
EIGEN_MINOR_VERSION << "\n";