C ++不支持嵌套函数。假设我有一个功能a和b,我想保证只有一个可以调用b,而没有其他人可以这样做吗?
答案 0 :(得分:6)
有多种方法可以做到这一点(没有一种是100%防弹,有人可以随时编辑你的源文件),但有一种方法
将该函数放入一个类中,使其成为私有函数,并使您希望能够将其称为“朋友”的函数。
假设您希望函数a
可以由函数b
调用,而不是其他人,另一种方法是将a
和b
放在他们自己的将源文件放在一起并制作a
static
。这样,a
只对同一源文件中的实体可见,但b
对于拥有该签名的所有人都可见。
或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)
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();
// ...
};