使用类只是为了维护几个常量变量是个好主意吗?
Is it a good idea to use classes just to maintain few constant variables
我遇到了一个日志记录机制的代码,在该代码中,根据严重性打印消息。因此,如果严重性设置为 0,则打印 DEBUG 日志,如果设置为 1000,则仅打印 INFO 日志等。
class Logs
{
public:
static const int DEBUG=0;
static const int INFO=1000;
static const int SOMETHING_ELSE=2000;
}
班上就是这样。没有别的。而不是按原样使用值,而是使用变量。示例:如果我想将严重性传递给某个辅助函数,那么它传递的不是传递 1000 作为其参数,而是传递Logs::INFO.
我的问题是,为什么我们真的需要一个类来定义这些常量变量。我们也可以使用枚举。或宏。或常量全局变量。或命名空间内的常量变量。但为什么要上课呢?与我提到的其他选项相比,使用类有什么优势吗?
只是选择使用一个而不是另一个,还是一个比其他一个有具体的优势?
我们也可以使用
enum
。
那将是我的首选,在Log
范围内定义的enum
。
或宏。
绝对不是。宏不如积分变量有很多原因。
或常量全局变量。
不像宏那么糟糕,但它们不应该是首选。
或命名空间内的常量变量。
这也是一种可能。即使在这里,我也建议使用enum
.
但为什么要上课呢?
在类范围内或namespace
范围内定义的enum
常量或整数常量之间的选择对我来说并不总是很清楚。您必须根据这些数字所代表的内容做出判断。在这种情况下,对我来说似乎可以使用:
class Logs
{
public:
enum MessageType {DEBUG=0, INFO=1000, SOMETHING_ELSE=2000};
}
Akhil 的观点,即使用 #define
是个好主意,原因有很多,其中最重要的是类型安全和后续代码重新定义值的可能性。
如果目的是限制对这些常量的访问(或使子类方便地访问它们(,那么将它们包含在类中当然是一种选择,但如果您打算将它们保持公开,那么我认为使用类可能不是您的最佳选择。
我会考虑尝试命名空间 - 命名空间的优点是不污染全局命名空间,并且可以与类似的语法(包括using
语句和::
语法(一起使用,但由于命名空间不是类,很少有人会假设这些值与特定对象相关联......这可能有助于其他人理解您的意图。
,您也可以使用 enum,但这仅适用于整数值。简单地声明值还有另一个优点 - 如果您想在另一个文件中实际定义值,您可以在外部声明它们。
namespace NyNamespace {
const int kMyValue = 5; // Can be referenced as MyNamespace::kMyValue, or benefit from a 'using' statement.
extern const int kDefinedElsewhere; // Can be declared here and defined elsewhere.
const float kMyFloatValue = 5.f; // Not limited to integers.
enum {
kMyEnumValue = 5 // Limited to integer values.
};
}
您可以像想要获得全局访问权限一样使用它
#define DEBUG 0
#define INFO 1000
#define SOMETHING_ELSE 2000
void functioncall_2(int)
{
//do something
}
//function call will be
functioncall_2(DEBUG);
或
enum LOG {
DEBUG,
INFO = 1000,
SOMETHING_ELSE = 2000,
}
void functioncall_1(LOG)
{
//do something
}
//function call will be
functioncall_1(DEBUG); // u can call it like LOG::DEBUG or DEBUG in the case of enum.
根据我的意见更好的方式
- 在声明中合并两个常量"std::set"(不是在运行时)
- 多个"常量引用"变量可以共享同一个内存吗?
- 为我的 c++ 类介绍制作一个三角形分类器.我有几个问题
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 如何返回或护理项目清单基于几个类别
- 我们如何在文本文件中找到C++中的几个单词?
- 关于 std::bitset 构造函数的几个问题?
- 几个 Nt 函数在 Windows 7 x32 上返回STATUS_WAIT_0
- std::stoi 只转换前几个字符
- C++ 通过接口使用从其他几个类继承的类
- 在矢量中使用擦除时双重释放或损坏(快速顶部).如何擦除一个矢量的几个项目知道它们的索引?
- 如何遍历几个每小时一次的根(.root)文件,并将它们组合成更大的每日数据.root文件?
- 第二个常量在运算符函数中做什么?
- 我有几个关于参考变量的问题
- 如何将几个变量复制到其他变量
- 如何在新设计中迁移需要几个额外参数的函数
- 多线程.如果我使用信号量,我可以在开始时创建很多线程还是应该只有几个线程?
- 如何在几个空行后打印文件中的输出
- recvfrom 只收到几个数据包,之后它进入等待状态
- 使用类只是为了维护几个常量变量是个好主意吗?