2016-09-14 31 views
3

名前空間にローカルな関数と変数をきれいに宣言したいので、名前空間のメンバーだけがそれらにアクセスできます。C++関数/変数を名前空間のローカルにするにはどうすればよいですか?

ルアでは、これを行うために "local"キーワードを使用します(ファイル/関数内)。 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名前空間で使用されます。

EDIT

は、ここに私のコードの擬似C++サンプルです。他の人が私の関数の内部の仕組みにぶつかる可能性がある場合は、「強制的な不透明さ」として、どのようにして、ローカルの名前空間を外部の名前空間にローカライズするか/「見えないようにする」のですか?名前空間は適していますか?

IEにアクセスできない名前空間の外に

+1

多分 'static'キーワードは、あなたが望むものである、または匿名の名前空間 – user2807083

+0

「名前空間へのローカル」。そんなことはない。名前空間が開いているので、とにかく役に立たないでしょう。任意の名前空間に独自の関数を追加できます。 –

答えて

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 
3

名前空間で宣言された変数は、修飾子(mynamespace :: myvariable)を使用して外部からアクセスできます。これは例えばstd :: coutにアクセスする方法です。

アクセスが公共プライベート保護キーワードを経由して、クラス内で制御することができます。

"グローバル"をプライベートアクセスを持つクラスの中に置き、このクラスをフレンドと名前空間内の他のクラスと関数にすることができます。これは維持する悪夢だけでなく、の友人からそうでない場合、これらのグローバルにアクセスすることも不可能になります。一方、関数の賢明な宣言(ネームスペースで定義されたクラスで動作し、関連する機能のみを実行するようにする)はすぐに問題を解決します。

もちろん、経験豊富なコーダーがいるので、誰かがファイルレベルの可視性、「extern」キーワードなどをチップに入れることができるかもしれません(これは古いC言語のものです)。どのような場合でも、あなたは、あなたのコードのサンプルを私たちに提供して、そのテーマについてのより良い見方をすることが可能でしょうか?

+0

Re: "可視性は、公開、非公開、保護されたキーワードでクラス内で制御できます。" - いいえ。 **アクセス**と**表示**は2つの異なるものです。キーワードpublicなどは**アクセス**のアクセスを制御します。プライベートの名前はまだ**表示**です。 –

+0

@PeteBeckerはい、絶対に正しいです。混乱については申し訳ありませんが、英語は母国語ではなく、物事は混乱する傾向があります。一度に編集します。 –

関連する問題