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

Enum over multiple files, or automatic unique constants over multiple files

本文关键字:文件 唯一 常量 用于 枚举      更新时间:2023-10-16

在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 s,但我不知道有什么方法可以自动增加#define每次分配给它,有办法做到这一点吗?

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

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

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