C ++如何在命名空间中创建函数/变量本地?

时间:2016-09-14 07:43:30

标签: c++ namespaces local

我想整齐地声明命名空间本地的函数和变量,因此只有命名空间成员才能访问它们。

在lua中,我会使用“local”关键字来执行此操作(在文件/函数中)。 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中使用。我如何本地化/“使其不可见”到外部名称空间wld,作为“强制不透明”,如果其他人可能会搞砸我的函数的内部工作?命名空间是否适合?

无法在命名空间之外的访问IE?

2 个答案:

答案 0 :(得分:3)

命名空间中声明的变量可以使用限定符(mynamespace :: myvariable)从外部访问。例如,这是您可以访问std :: cout的方式。

可以通过 public private protected 关键字在类中控制访问。

一个可能(并且笨拙)的修复方法是将你的"全局变量"在具有私有访问权限的类中,然后使用命名空间中的其他类和函数创建此类 friend 。这不仅是维护的噩梦,而且如果不是来自朋友,也将无法访问这些全局变量。

另一方面,聪明的函数声明(因此它们对命名空间中定义的类进行操作并仅执行相关功能)将立即解决问题:一切都可以访问,因为它必须如此。

当然,周围有更多有经验的编码人员,所以也许有人可以提供文件级别的可视性," extern"关键字等(我记得这些是旧C中的东西)。在任何情况下,您是否可以向我们提供代码示例,以便更好地了解该主题?

答案 1 :(得分:2)

AFAIK在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 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