C++ ヘッダーで使用することは悪い習慣と見なされます。ヘッダーで名前空間のエイリアスusing namespace
を使用することも同様に悪い考えであり、各実装ファイルは使用したいエイリアスを宣言する必要がありますか?
ヘッダーは完全に指定された名前を使用する傾向があるため (ヘッダーでは名前空間を使用しないため)、エイリアスは便利ですが、#included
.
ここでのベストプラクティスは何ですか? また、名前空間エイリアスのスコープは何ですか?
C++ ヘッダーで使用することは悪い習慣と見なされます。ヘッダーで名前空間のエイリアスusing namespace
を使用することも同様に悪い考えであり、各実装ファイルは使用したいエイリアスを宣言する必要がありますか?
ヘッダーは完全に指定された名前を使用する傾向があるため (ヘッダーでは名前空間を使用しないため)、エイリアスは便利ですが、#included
.
ここでのベストプラクティスは何ですか? また、名前空間エイリアスのスコープは何ですか?
名前空間エイリアスをヘッダーに入れると、このエイリアスは (パブリック) API の一部になります。
この手法は、次のように ABI 互換のバージョン管理を行う (または少なくとも破損を可視化する) ために使用されることがあります。
namespace lib_v1 { ... }
namespace lib_v2 { ... }
namespace lib = lib_v2;
またはより一般的に:
namespace lib {
namespace v1 {}
namespace v2 {}
using namespace v2;
}
一方、タイピングを節約するためだけに行う場合は、おそらくあまり良い考えではありません。using
(ディレクティブを使用するよりもはるかに優れています)
私はこのように名前のない名前空間でそれを行います:
#include <whatyouneed>
...
namespace {
typedef ...
using ..
namespace x = ...
// anything you need in header but shouldn't be linked with original name
}
// normal interface
class a: public x::...