本来是准备写namespace的用法的,但是感觉有点大,写不来,所以干脆结合我碰到问题,说说解决办法

问题描述


我们经常遇到程序里要用到很多常量,在当初的C里,我们用宏的方式解决,在C++里,也可以如此,而且还更提倡用const的方式定义常量,因为这样会有类型检查 但是这样定义的常量是在整个程序里可见的,且相互之间没有关联。而我们经常遇到的问题是,很多常量对某个问题都是相互关联的,比如一种XML文档中的所有标签名称,这个时候我们希望把这些名称放在一个域中,引用他们的时候,可以是A::a这样引用,A是域,a是此域中的常量。

解决办法1


用类的方式解决,如在.h中申明或定义:

class Tag
{    
public:    
	static std::string s;    
	static const int b = 1;    
};

在对应的.cpp中定义:

string Tag::s = "hello";

此种方法的缺点是,对于非int系列的常量(如int ,long), 必须在.cpp中定义它们,所以显得很麻烦

解决办法2


用namespace的方式解决,只需在.h文件中定义:

namespace Tag 
{
	static const int a = 3;
	static const std::string s = "gang";
}

此种方法不再需要.cpp文件。

引用方法


对上面两种方法定义的常量,其引用方法是一样的,都是Tag::s即可,所以对用户来说是透明的。



blog comments powered by Disqus

Published

11 April 2012

Tags