仅在函数中设置一次静态变量

use*_*947 5 c++ eigen

所以我想知道是否有可能只在函数范围内设置一次静态变量.例如,考虑这个功能:

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而不是每个函数调用,我怎么能得到这个?

dfr*_*fri 7

P您可以使用以下finished()方法CommaInitializer在声明中初始化它,而不是声明并随后单独初始化它:

static const Matrix3f P =
    (Matrix3f() << Vector3f::UnitX(), Vector3f::UnitY(),
     Vector3f::Zero()).finished();
Run Code Online (Sandbox Code Playgroud)

使用这种方法,您也可以声明Pconst.


Gui*_*cot 5

您可以使用返回正确值的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)


Igo*_*nik 4

沿着这些思路:

static Matrix3f P;
static bool dummy = (
  (P << Vector3f::UnitX(), Vector3f::UnitY(), Vector3f::Zero()),
  true);
Run Code Online (Sandbox Code Playgroud)