在C ++中有没有办法在编译时自动生成多个文件的常量? 就像枚举在单个文件中自动生成常量一样,但常量必须在多个文件中是唯一的。
例如:
classBase.hpp
classBase{
//blah blah
};
classA.hpp
class childA : public classBase{
private:
static const unsigned int mID = NEXT_ID;
};
classB.hpp
class childB : public classBase{
private:
static const unsigned int mID = NEXT_ID;
};
classC.hpp
class childC : public classBase{
private:
static const unsigned int mID = NEXT_ID;
};
所以在这种情况下,从classBase继承的每个类都会自动被分配下一个ID(0,1,2 ......)
我猜有一种方法可以用#define
来实现,但我不知道每次分配给它时自动增加#define
的方法,是否有这样做的方法?
答案 0 :(得分:4)
在编译时自己生成一个序列并不容易,但是大多数编译器都为此支持一个宏:__COUNTER__
。它是一个计数器,每次在源代码中使用时都会被编译器本身增加,因此您可以在多个文件中使用它。例如,您的代码可能是:
class childB : public classBase {
private:
static const unsigned int mID = __COUNTER__;
};
如果您的编译器没有提供该宏(或者您需要更多地控制ID生成),那么您必须编写更多代码,但可以使用template metaprogramming完成。