0

私は常にConstants、アプリケーションで使用される定数値を格納するためにJavaで呼び出されるクラスを作成します。

アプリケーションのすべてのクラスについて

class Constants {

    public static final int GOOD_RES = 1;
    public static final int BAD_RES = 0;
    public static final int FILE_NOT_READ = 10;
    // To be continued
}

または単一のクラスの場合

class SomeClass {

    private static final int GOOD_RES = 1;
    private static final int BAD_RES = 0;
    private static final int FILE_NOT_READ = 10;
    // To be continued
}

C ++で同じことを行う方法は?宣言を含むヘッダーファイルにクラスを作成し、CPPファイルに定義を配置できます。例えば。

ヘッダーファイル。

class const_values {
    const static int GOOD_STATE = 1;
    const static int BAD_STATE = 2;
    const static string s;
}

CPPファイル

string const_values::s = "lorem ipsum";

大丈夫ですか?

4

2 に答える 2

4

そのために名前空間を使用します。

constants.h:

#include <string>
namespace Constants
{
    const int GOOD_STATE = 1;
    const int BAD_STATE = 2;
    const std::string str("test");
}

main.cpp:

#include <iostream>
#include "constants.h"
int main(int argc, char** argv)
{   
    std::cout << Constants::GOOD_STATE << " " << Constants::str << std::endl;
}

出力:1テスト

于 2012-05-01T16:27:08.483 に答える
2

静的定数以外の目的でクラスを使用することは正当なC++ですが、通常、目標を達成するためのより良い方法があることをお勧めします。

何よりもまず、名前空間の使用です。

namespace values
{
    const static int GOOD_STATE = 1;
    const static int BAD_STATE = 2;
    const static string s;  // you can never make this anything but empty, by the way
};

何らかの理由で単にクラスを使用する必要がある場合は、次の方法を使用することで、別の(おそらくより良い方法ではない)方法を使用できますenum

class values
{
public:
  enum {GOOD_STATE = 1, BAD_STATE = 2};
};

名前空間を使用する利点の1つは、その名前空間を名前なしにすることができることです。これには、名前空間内で宣言された名前をグローバルスコープで使用できるようにする効果がありますが、名前が定義されている変換ユニットでのみ使用できます。したがって、他の翻訳ユニット間での衝突はなく、名前空間のばかげた名前の必要性はおそらく少なくなります。

于 2012-05-01T16:27:27.953 に答える