1

在 C++ 中有没有办法在编译时自动生成多个文件的常量?就像枚举在单个文件中自动生成常量一样,但常量在多个文件中必须是唯一的。

例如:

类基础.hpp

classBase{
    //blah blah
};

A类.hpp

class childA : public classBase{
private:
    static const unsigned int mID = NEXT_ID;    
};

B类.hpp

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

C类.hpp

class childC : public classBase{
private:
    static const unsigned int mID = NEXT_ID;    
};

所以在这种情况下,从 classBase 继承的每个类都会自动分配下一个 ID(0、1、2...)

我想有一种方法可以用#defines 来做,但我不知道有什么方法可以在#define每次分配给它时自动递增 a,有没有办法做到这一点?

4

1 回答 1

4

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

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

如果您的编译器不提供该宏(或者您需要对 ID 生成进行更多控制),那么您必须编写更多代码,但可以通过模板元编程来完成。

于 2013-05-16T10:54:29.250 回答