枚举多个文件,或多个文件上的自动唯一常量

时间:2013-05-16 10:49:28

标签: c++ enums const c-preprocessor

在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的方法,是否有这样做的方法?

1 个答案:

答案 0 :(得分:4)

在编译时自己生成一个序列并不容易,但是大多数编译器都为此支持一个宏:__COUNTER__。它是一个计数器,每次在源代码中使用时都会被编译器本身增加,因此您可以在多个文件中使用它。例如,您的代码可能是:

class childB : public classBase {
private:
    static const unsigned int mID = __COUNTER__;    
};

如果您的编译器没有提供该宏(或者您需要更多地控制ID生成),那么您必须编写更多代码,但可以使用template metaprogramming完成。