[c++] インラインネームスペースとは何ですか?



0 Answers

http://www.stroustrup.com/C++11FAQ.html#inline-namespace Stroustrupによって書かれ、管理されている文書で、ほとんどのC ++ 11機能の動機付けを知っておくべきだと思います。 )

それに応じて、下位互換性のためのバージョン管理を可能にすることです。 複数の内部名前空間を定義し、最新の名前空間をinlineます。 または、とにかく、バージョン管理を気にしない人のためのデフォルトのものです。 私は、最新のものが、未だデフォルトではない未来の、または最先端のバージョンかもしれないと思う。

与えられた例は:

// file V99.h:
inline namespace V99 {
    void f(int);    // does something better than the V98 version
    void f(double); // new feature
    // ...
}

// file V98.h:
namespace V98 {
    void f(int);    // does something
    // ...
}

// file Mine.h:
namespace Mine {
#include "V99.h"
#include "V98.h"
}

#include "Mine.h"
using namespace Mine;
// ...
V98::f(1);  // old version
V99::f(1);  // new version
f(1);       // default version

using namespace V99;を使わない理由をすぐには知りませんusing namespace V99; 内部のネームスペースMine 、Bjarneの言葉を委員会の動機付けに取り入れるために、ユースケースを完全に理解する必要はありません。

Question

C ++ 11では、 inline namespaceが許可されnamespace 。そのすべてのメンバーも、自動的に囲んでいるnamespace 。 私はこれの有用なアプリケーションを考えることができません - 誰かが、 inline namespaceが必要であり、それが最も慣用的な解決策である状況の簡潔で簡潔な例を挙げてください。

(また、 namespaceが1つの宣言でinlineで宣言されていて、別のファイルに存在する宣言ではない場合はどうなるのかは分かりません。




Related