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