我在.cpp文件中将几个消息字符串分组到一个命名(非匿名)命名空间中,用于处理输出的类,如以下代码所示:
namespace Messages
{
static const std::string AppTitle = "The Widgetizer - Serving all your Widget needs";
static const std::string SuccessMsg = "Great success! Widgets for all! ";
static const std::string FailMsg = "No widgets for you!";
};
void Display::printTitle()
{
out << Messages::AppTitle << std::endl;
}
void Display::printSuccessMsg()
{
out << Messages::SuccessMsg << std::endl;
}
void Display::printFailMsg()
{
out << Messages::FailMsg << std::endl;
}
我的逻辑是,通过这种方式,它们都位于一个中央位置,位于一个有意义且具有自我说明性名称的 namespace 下,并且它们不会暴露给客户端代码(就像我将 namespace 放在目录中那样)。 .h文件)。
这是一般的好习惯还是我没有看到的陷阱?
如果它们位于这样的文件范围命名空间中,是否需要static关键字?
就最佳实践和公认的C++习惯用语和样式而言,像匿名 namespace 一样,这会更好吗?还是简单地作为静态const类成员?
我承认这对于我正在编写的小程序来说可能是过大的,因为它们可能只会用在这些函数中,但总的来说,不是硬编码消息字符串是一个好习惯吗?
最佳答案
如果使代码更清晰,则在命名空间中对相关对象进行分组是一种很好的做法。没有任何特定的陷阱,但是如果您不小心,深度嵌套的 namespace 可能会导致代码过于冗长。
您需要使用static
或const
为其提供内部链接,但是最好将您的 namespace 包含在一个未命名的 namespace 中。不建议在命名空间范围内使用static
,仅使用const
意味着如果有人声明具有相同名称的extern
对象,您会感到惊讶。
如果将它们分组在一个命名的命名空间中使代码更具表现力,那就去做;否则,不要。我宁愿不要让它们成为类成员,除非有必要,以避免在头文件中添加不必要的声明。
关于c++ - 在实现文件中命名的 namespace ,以将const字符串文字分组-好/不好?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3461444/