名前空間 (C++をもう一度)
[履歴] [最終更新] (2014/12/14 09:58:56)

サンプルコード

#include <iostream>

using std::cout; // using namespace std::cout ではないことに注意
using std::endl; // ("namespace" ではない)
// ↑グローバル空間での使用例です。関数内などで使用すると局所的に有効になります

namespace MyName {
    int intval = 0;

    namespace Inner {
        void Show(); // プロトタイプ宣言
        int intval = 1;
    }
}

int intval = 2;

// 名前空間は分割できるのです↑↓
namespace MyName {
    namespace Inner {
        void Show() {
            // 自分の領域のものが「既出であれば」それが優先されます。プロトタイプ
            // 宣言を利用していれば必ず「既出」になることが保証できますね。
            cout << intval << endl; //=> 1

            // グローバル領域のものを明示して使用することもできます
            cout << ::intval << endl; //=> 2
        }
    }
}

int main() {

    cout << MyName::intval << endl;
    //=> 0
    cout << MyName::Inner::intval << endl;
    //=> 1
    cout << ::intval << endl; // 単に intval としても同じです。
    //=> 2


    // 名前空間に別名を付与して短縮できます
    namespace MI = MyName::Inner;
    MI::Show();

    return 0;
}
関連ページ
    リンケージ (linkage) ソースコードが複数ある場合にはリンケージという概念が登場します。関数およびグローバル変数が有する属性で、ファイルを越えて利用できるかどうかを示す性質です。実体が定義されたファイルの外で利用できる関数やグローバル変数を「外部 (external) リンケージをもつ」と表現します。逆に、実体が定義されたファイルの中でのみ利用できる関数やグローバル変数を「内部 (int
    概要 C++ を Python から利用する方法の一つに pybind11 があります。C++11 をサポートするコンパイラが必要です。サンプルコードを記載します。 pybind11 — Seamless operability between C++11 and Python Reference 簡単なサンプル