尝试创建一个同时将Eigen::Matrix3d
和Eigen::Vector4d
作为构造函数参数的类,但遇到了不明确的问题。给定以下测试类,
class MyClass
{
public:
MyClass(const Eigen::Matrix3d& m)
{
}
MyClass(const Eigen::Vector4d& v)
{
}
};
如果我接着做下面的事,
int main(int argc, char** argv)
{
Matrix3d m;
MyClass t1(m.transpose());
}
这不能编译并具有以下错误,
call of overloaded ‘MyClass(Eigen::Transpose<Eigen::Matrix<double, 3, 3> >)’ is ambiguous
516 | MyClass t1(m.transpose());
| ^
note: candidate: ‘MyClass::MyClass(const Vector4d&)’
561 | MyClass(const Eigen::Vector4d& v)
| ^~~~~~~
note: candidate: ‘MyClass::MyClass(const Matrix3d&)’
556 | MyClass(const Eigen::Matrix3d& m)
我不清楚如何解决这个问题
1条答案
按热度按时间guicsvcw1#
您可以创建构造函数模板来接受
Eigen::Transpose<...>
对象(由transpose()
返回)和具体的Matrix3d
和Matrix4d
对象。我假设两个独立构造函数中的操作非常相似,因此可以将它们组合起来:
...并为
Transpose
对象添加委托构造函数模板:现在,以下所有情况都将有效:
输出:
如果你 * 只 * 想接受转置,删除第一个构造函数和委托: