所以我想知道是否有可能只在函数范围内设置一次静态变量.例如,考虑这个功能:
void projectPointIntoPlane(const Affine3f& plane2xy, Vector3f& p)
{
static Matrix3f P;
P << Vector3f::UnitX(), Vector3f::UnitY(), Vector3f::Zero();
p = plane2xy.inverse() * P * plane2xy * p;
}
Run Code Online (Sandbox Code Playgroud)
我想只设置一次P而不是每个函数调用,我怎么能得到这个?
P您可以使用以下finished()方法CommaInitializer在声明中初始化它,而不是声明并随后单独初始化它:
static const Matrix3f P =
(Matrix3f() << Vector3f::UnitX(), Vector3f::UnitY(),
Vector3f::Zero()).finished();
Run Code Online (Sandbox Code Playgroud)
使用这种方法,您也可以声明P为const.
您可以使用返回正确值的lambda.因为它在初始化表达式中,所以它只被调用一次:
void projectPointIntoPlane(const Affine3f& plane2xy, Vector3f& p)
{
static Matrix3f P = []{
Matrix3f P;
P << Vector3f::UnitX(), Vector3f::UnitY(), Vector3f::Zero();
return P;
}();
p = plane2xy.inverse() * P * plane2xy * p;
}
Run Code Online (Sandbox Code Playgroud)
沿着这些思路:
static Matrix3f P;
static bool dummy = (
(P << Vector3f::UnitX(), Vector3f::UnitY(), Vector3f::Zero()),
true);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |