在C ++中,是否有一种实用的方法将一个函数的调用限制为某个函数?

时间:2011-10-30 16:20:42

标签: c++

C ++不支持嵌套函数。假设我有一个功能a和b,我想保证只有一个可以调用b,而没有其他人可以这样做吗?

4 个答案:

答案 0 :(得分:6)

有多种方法可以做到这一点(没有一种是100%防弹,有人可以随时编辑你的源文件),但有一种方法

  1. 将该函数放入一个类中,使其成为私有函数,并使您希望能够将其称为“朋友”的函数。

  2. 假设您希望函数a可以由函数b调用,而不是其他人,另一种方法是将ab放在他们自己的将源文件放在一起并制作a static。这样,a只对同一源文件中的实体可见,但b对于拥有该签名的所有人都可见。

  3. 或3.如果你可以使用lambda(即你的编译器支持C ++ 11的这个特性):

    void a() {
        auto f = []() { /* do stuff */ }
    
        f();
    }
    

答案 1 :(得分:4)

int main()
{
    class a
    {
        public:
            static void foo(){}
    };
    a::foo();
}

它为我编译好,所以你可以在C ++中使用“嵌套函数”

答案 2 :(得分:2)

passkey idiom

class KeyForB{
  // private ctor
  KeyForB(){}
  friend void a();
};

void a(){
  b(KeyForB());
}

void b(KeyForB /*unused*/){
}

答案 3 :(得分:2)

不,但您始终可以创建功能级别的类。例如:

void MyFunction() {

    class InnerClass {
    public:
        static void InnerFunction() {
        }
    };

    InnerClass::InnerFunction();
    InnerClass::InnerFunction();
    // ...

};