功能呼叫保护

2 c++ function call guard

假设我有一个名为的自由函数InitFoo.我想保护这个功能不被意外多次调用.我没有多想,写了以下内容:

void InitFoo()
{
    {
        static bool flag = false;
        if(flag) return;
        flag = true;
    }

    //Actual code goes here.
}
Run Code Online (Sandbox Code Playgroud)

不过,这看起来像一个大疣.InitFoo没有需要保留任何其他状态信息.有人可以提出一种方法来实现同一目标而不是丑陋吗?

当然,宏并不算数.

Dan*_*ker 10

你可以用一些不同的丑陋来做到这一点:

struct InitFoo
{
     InitFoo()
     {
         // one-time code goes here
     }
};

void Foo()
{
    static InitFoo i;
}
Run Code Online (Sandbox Code Playgroud)

你还在使用static,但现在你不需要做自己的标志检查 - static已经放入一个标志并检查它,所以它只构造i一次.