2

定数 (特定の文字列や数値など) を中心点で定義することが望ましいです。コードの読みやすさを維持するために、これらの定数に簡単にアクセスできることも望ましいです。これを達成するための優れたプラクティスを調査しているときに、次の2つの解決策を見つけました( https://stackoverflow.com/a/9649425/2776093 )。

FoodConstants.h:

namespace FoodConstants {
    namespace Fruits {
        extern const string Apple;
        ...
    }
    ...
}

FoodConstants.cpp:

namespace FoodConstants {
    namespace Fruits {
        const string Apple = "apple" ;
        ...
    }
    ...
}

FoodConstants2.h:

class FoodConstants {
public:
    class Fruits {
    public:
        static const string Apple;
        ...
    }
    ...
}

FoodConstants2.cpp:

const string FoodConstants::Fruits::Apple = "apple"
...

どちらのソリューションでも、FoodConstants::Fruits::Apple を使用して、プログラム内の .h が含まれる任意の場所でリンゴ定数にアクセスできます。初期化は同じコンパイル単位で行われ、初期化の問題が回避されます。私は 1 つの違いに気付きました: 2 番目の解決策では、たとえば、"名前空間 FoodConstants を使用して" 文字列定数へのアクセスを Fruits::Apple に短縮することはできません。

他に違いはありますか?このような定数を整理するための好ましい方法はありますか?

4

1 に答える 1

0

他に違いはありますか?

はい、あります。私は2つを見ることができます:

  1. クラス ソリューションを使用すると、名前空間ソリューションでは不可能なアクセシビリティ ( public/ protected/ ) を制御できます。private

  2. 名前空間を使用すると、宣言を複数のファイルに分割できますが、クラス定義 (すべてのメンバーの宣言を含む) は単一のファイルで指定する必要があるため、これはクラス ソリューションでは不可能です。

于 2013-09-13T13:10:49.563 に答える