、私はこのようなクラスを記述します。モジュールとしてのC++名前空間?過去には
// my_class.h
class MyClass
{
public:
// Signals emitted by MyClass objects.
typedef boost::signal<..> SignalA;
typedef boost::signal<..> SignalB;
enum SomeEnum
{
..
};
enum AnotherEnum
{
..
};
typedef some_type SomeOtherType;
// an exception thrown by MyClass objects
class ExceptionA
{
..
};
MyClass();
// rest of class definition omitted
};
私はいつもこのスタイルについて嫌っ事は、それはクラス宣言を回旋ということです。それで、最近のプロジェクトでは何か新しいことを試すことにしました。
// my_class.h
namespace my_class
{
// Signals emitted by MyClass objects.
typedef boost::signal<..> SignalA;
typedef boost::signal<..> SignalB;
enum SomeEnum
{
..
};
enum AnotherEnum
{
..
};
typedef some_type SomeOtherType;
// an exception thrown by MyClass objects
class ExceptionA
{
..
};
class MyClass
{
public:
MyClass();
..
};
}
、結果はそれほど悪くはなかった:私は(我々はまた、Pythonの私は仕事をたくさん使用してください)Pythonでのモジュールの場合と同様の方法で名前空間を使用することにしました。唯一の欠点は、すべての前に常に "my_class ::"という接頭辞を付ける必要があったことです。しかし、それは "using"ステートメントを利用することで緩和することができます。
私は別のプロジェクトを開始しようとしており、もう一度やり直すことを考えていました。この名前空間の使用を採用することに重大な欠点(冗長性の向上以外)がありますか?
私は、増加した冗長性は良いことであり、 'using'ステートメントの使用をほぼ完全に停止したと言います。 Boostのような深くネストされた名前空間にはまだそれを使用してください。また、私のプロジェクトにはネストされた(数レベルの)ネームスペースがたくさんあり、ネームスペースにない唯一のコードは 'main'関数です。 –