【发布时间】:2014-06-06 01:26:06
【问题描述】:
我有一组 C++ 类,每个类都必须声明一个唯一的顺序 id 作为编译时常量。
为此,我使用了__COUNTER__ 内置宏,它转换为一个整数,每次出现时都会递增。 id 不需要遵循严格的顺序。唯一的要求是它们是顺序的,并且从 0 开始:
class A {
public:
enum { id = __COUNTER__ };
};
class B {
public:
enum { id = __COUNTER__ };
};
// etcetera ...
我的问题是:有没有办法使用 C++ 构造(例如模板)实现相同的结果?
【问题讨论】:
-
__COUNTER__有什么问题 -
没有错,但如果有 C++ 的方式,我更愿意,以保持一致性。另外,我不确定
__COUNTER__的便携性如何。 -
可能不是,还有,你打算用它做什么?我很难看到宏跨库边界生成唯一 ID。
-
我会说缺乏这样的结构是
__COUNTER__存在的原因。 -
__COUNTER__在 Gnu CC (gcc) 和我在下面的@Cheers 评论中看到的,也在 Visual Studio 中得到支持——非常便携.. 除非你打算去一个非基于 linux 或 windows 的系统。
标签: c++ templates macros template-meta-programming