希望在某个中心点定义常数(例如某些字符串或数字)。为了保持代码的可读性,还希望能够容易地访问这些常量。在我研究实现这一目标的良好实践时,我现在发现了以下两个解决方案(https://stackoverflow.com/a/9649425/2776093)。
FoodConstants.h:
namespace FoodConstants {
namespace Fruits {
extern const string Apple;
...
}
...
}
FoodConstants.cpp:
namespace FoodConstants {
namespace Fruits {
const string Apple = "apple" ;
...
}
...
}
FoodConstants2.h:
class FoodConstants {
public:
class Fruits {
public:
static const string Apple;
...
}
...
}
FoodConstants2.cpp:
const string FoodConstants::Fruits::Apple = "apple"
...
对于这两种解决方案,我可以在包含.h的程序中的任何地方使用FoodConstants :: Fruits :: Apple访问apple常量。初始化在同一编译单元中完成,避免了初始化问题。我注意到了一个区别:对于第二个解决方案,我不能,例如,使用“使用命名空间FoodConstants”来缩写对Fruits :: Apple的字符串常量的访问。
还有其他差异吗?是否有一种组织常量的首选方法?
答案 0 :(得分:0)
还有其他差异吗?
是的,有。我可以看到两个:
使用类解决方案,您可以控制命名空间解决方案无法实现的辅助功能(public
/ protected
/ private
)。
使用命名空间可以将声明拆分为多个文件,而这对于类解决方案是不可能的,因为必须在单个文件中给出类定义(包含所有成员的声明)。