2

希望在某个中心点定义常量(例如某些字符串或数字)。为了保持代码的可读性,还希望能够轻松访问这些常量。在我研究实现这一目标的良好实践期间,我现在找到了以下两种解决方案(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 访问苹果常量。初始化在同一个编译单元中完成,避免了初始化问题。我注意到了一个区别:对于第二种解决方案,我不能,例如,使用“使用命名空间 FoodConstants”来缩写使用 Fruits::Apple 对字符串常量的访问。

还有其他区别吗?有没有像这样组织常量的首选方法?

4

1 回答 1

0

还有其他区别吗?

是的,有。我可以看到两个:

  1. 使用类解决方案,您可以控制使用命名空间解决方案无法实现的可访问性 ( public/ protected/ private)。

  2. 使用命名空间,您可以将声明拆分到多个文件中,而使用类解决方案则无法做到这一点,因为类定义(包含所有成员的声明)必须在单个文件中给出。

于 2013-09-13T13:10:49.563 回答