C++ 如何使 function/variable 局部于命名空间?
C++ How do I make a function/variable local to a namespace?
我想整洁地声明一个命名空间的局部函数和变量,这样只有命名空间成员才能访问它们。
在 lua 中,我会使用 "local" 关键字来执行此操作(在 file/function 中)。在 C++ 中有什么相关的可能吗?
编辑
这是我的代码的伪 C++ 示例:
namespace wld {
const int wldDivis = 4;
void myFunc(){
// wldDivis constant used here
}
void myFunc2(){
// wldDivis also used here
}
}
// Somewhere later
wld::myFunc();
wld::myFunc2();
变量"wldDivis"只在命名空间wld中使用过。我如何将/"make it invisible" 本地化到外部命名空间 wld,作为 "enforced opacity" 如果其他人可能会破坏我的函数的内部工作?命名空间是否合适?
无法访问 IE 在命名空间之外?
在命名空间中声明的变量可以使用限定符从外部访问 (mynamespace::myvariable)。例如,这是您可以访问 std::cout 的方式。
可以通过 public、private 和 [=20= 在 classes 内控制访问]保护个关键字。
一个可能的(笨拙的)解决方法是将你的 "globals" 放在一个具有私人访问权限的 class 中,然后让这个 class friend 与名称空间中的其他 classes 和函数。这不仅是维护的噩梦,而且如果不是来自 friend.
,也将无法访问这些全局变量
另一方面,函数的巧妙声明(因此它们对命名空间中定义的 classes 进行操作并仅执行相关功能)将立即解决问题:一切都是可访问的,因为它需要所以。
当然,周围有更多经验丰富的编码人员,所以也许有人可以加入文件级可见性、"extern" 关键字等(我记得这些是旧 C 中的东西)。无论如何,您是否可以向我们提供您的代码示例以更好地了解该主题?
据我所知,在 C++ 的命名空间中没有访问限制。
namespace foo {
void local_func() {}
// local_func can be accessed inside the namespace
void global_func() { local_func(); }
}
// ...
foo::local_func(); // local_func can be accessed outside the namespace
您可以在 class 定义中使用静态成员函数实现类似的功能:
class foo {
private:
static void local_func() {}
public:
// local_func can be accessed inside the "namespace" of the class
void global_func() { local_func(); }
};
// ...
foo::local_func(); // error : local_func is private to the class
我想整洁地声明一个命名空间的局部函数和变量,这样只有命名空间成员才能访问它们。
在 lua 中,我会使用 "local" 关键字来执行此操作(在 file/function 中)。在 C++ 中有什么相关的可能吗?
编辑
这是我的代码的伪 C++ 示例:
namespace wld {
const int wldDivis = 4;
void myFunc(){
// wldDivis constant used here
}
void myFunc2(){
// wldDivis also used here
}
}
// Somewhere later
wld::myFunc();
wld::myFunc2();
变量"wldDivis"只在命名空间wld中使用过。我如何将/"make it invisible" 本地化到外部命名空间 wld,作为 "enforced opacity" 如果其他人可能会破坏我的函数的内部工作?命名空间是否合适?
无法访问 IE 在命名空间之外?
在命名空间中声明的变量可以使用限定符从外部访问 (mynamespace::myvariable)。例如,这是您可以访问 std::cout 的方式。
可以通过 public、private 和 [=20= 在 classes 内控制访问]保护个关键字。
一个可能的(笨拙的)解决方法是将你的 "globals" 放在一个具有私人访问权限的 class 中,然后让这个 class friend 与名称空间中的其他 classes 和函数。这不仅是维护的噩梦,而且如果不是来自 friend.
,也将无法访问这些全局变量另一方面,函数的巧妙声明(因此它们对命名空间中定义的 classes 进行操作并仅执行相关功能)将立即解决问题:一切都是可访问的,因为它需要所以。
当然,周围有更多经验丰富的编码人员,所以也许有人可以加入文件级可见性、"extern" 关键字等(我记得这些是旧 C 中的东西)。无论如何,您是否可以向我们提供您的代码示例以更好地了解该主题?
据我所知,在 C++ 的命名空间中没有访问限制。
namespace foo {
void local_func() {}
// local_func can be accessed inside the namespace
void global_func() { local_func(); }
}
// ...
foo::local_func(); // local_func can be accessed outside the namespace
您可以在 class 定义中使用静态成员函数实现类似的功能:
class foo {
private:
static void local_func() {}
public:
// local_func can be accessed inside the "namespace" of the class
void global_func() { local_func(); }
};
// ...
foo::local_func(); // error : local_func is private to the class