C ++中的状态标志

时间:2012-05-01 16:19:28

标签: c++ constants

我总是在Java中创建一个名为Constants的类来存储将在应用程序中使用的常量值。

对于应用程序的所有类

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";

可以吗?

2 个答案:

答案 0 :(得分: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次测试

答案 1 :(得分: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 s:

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

使用namepsace的一个好处是可以使该命名空间不具名。这样可以使命名空间内声明的名称在全局范围内可用,但仅限于定义它们的转换单元。因此,没有其他翻译单元的冲突,也许不需要名称空间的愚蠢名称。