特征:不能对Vector2i使用norm()

时间:2013-06-04 12:46:54

标签: eigen

我做不到:

Vector2i vec(0, 1, 2);
cout << vec.norm() << endl;

因为它给出了编译器错误,在某些失败的断言中提及:THIS_FUNCTION_IS_NOT_FOR_INTEGER_NUMERIC_TYPES

我能做到:

Vector2i i_vec(0, 1, 2);
Vector2f f_vec;
f_vec = i_vec.cast<float>();
cout << f_vec.norm() << endl;

显然很有效。

问题:没有为norm定义VectorXi方法的任何原因?

也许Eigen使用Vector的元素类型来确定norm()的返回类型(在这种情况下,有意义的是,norm()不会被定义为返回类型int)?

好奇。

1 个答案:

答案 0 :(得分:3)

如果我正确地记住了norm()函数的动作,它需要一些输入的平方根。显然,平方根在很多情况下是非整数的。另一方面,如果我记住特征包的逻辑,一旦声明了特定元素的矩阵(int, double, complex<double>),它就只能使用这种类型的元素。所以你的建议完全正确。