0

我总是创建一个用 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;
}

文件

string const_values::s = "lorem ipsum";

可以吗?

4

2 回答 2

4

为此使用命名空间:

常量.h:

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

主.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
};

如果由于某种原因你必须使用一个类,另一种(可能不是更好的)方法是使用enums:

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

使用命名空间的一个好处是您可以使该命名空间不命名。这具有使命名空间内声明的名称在全局范围内可用的效果,但仅在定义它们的翻译单元中可用。因此,其他翻译单元之间不会发生冲突,并且可能不太需要命名空间的愚蠢名称。

于 2012-05-01T16:27:27.953 回答