我总是在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";
可以吗?
答案 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的一个好处是可以使该命名空间不具名。这样可以使命名空间内声明的名称在全局范围内可用,但仅限于定义它们的转换单元。因此,没有其他翻译单元的冲突,也许不需要名称空间的愚蠢名称。