在编译时生成唯一的数字
Generate unique numbers at compile time
我想为我的头中的每个类生成唯一的数字,在我的情况下是素数,但假设这只能是连续的数字,即1,2,3,4等。
我当然可以硬编码这些:
struct A { enum { ID = 1; }; };
struct B { enum { ID = 2; }; };
struct C { enum { ID = 3; }; };
struct D { enum { ID = 4; }; };
这是非常错误的,因为实际上类并没有那么小,如果我在中间添加一个新类,如果我不想完全放松ID的概述,我必须更改以下所有数字。
我希望我能做到以下几点:
struct A { enum { ID = get_next_int(); }; };
struct B { enum { ID = get_next_int(); }; };
struct C { enum { ID = get_next_int(); }; };
struct D { enum { ID = get_next_int(); }; };
但是由于constexpr函数调用不能有副作用,所以这是不可能的。我认为使用宏也不可能得到这样的结果。
我也会很幸运有这样的东西:
struct A_id_holder : some_base_counter {};
struct A { enum { ID = A_id_holder::ID; }; };
struct B_id_holder : some_base_counter {};
struct B { enum { ID = B_id_holder::ID; }; };
struct C_id_holder : some_base_counter {};
struct C { enum { ID = C_id_holder::ID; }; };
struct D_id_holder : some_base_counter {};
struct D { enum { ID = D_id_holder::ID; }; };
但老实说,我不知道如何实现这一点。
我能实现我的目标吗?如果可以,如何实现?
我认为Boost预处理器库可以为您做到这一点,也许您应该阅读:如何在C预处理器中生成唯一值?
根据您使用的编译器,还有一种替代方案,gcc和msvc有一个___COUNTER___宏,该宏允许序列号:http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html#Common-预定义宏
大多数人使用__COUNTER__
宏执行此操作。但这是不标准的,整个程序只有一个。
这是我使用模板和重载提出的一个C++破解,它符合标准并支持多个计数器。
如果使用gcc
,则可以使用__COUNTER__
宏。
一种方法可能是在需要唯一数字的任何位置硬编码占位符,然后编写一个小型实用程序来预处理文件,也许可以将最后使用的数字保留在文件中,以便在调用中保持不变。
相关文章:
- 按唯一标识符描述数字列表
- C++:创建1000次唯一的随机分布,在任何分布中都没有重复的数字
- 需要在C 中生成一个从00001到99999的唯一5位数字
- 生成跨系统唯一数字的算法
- 选择6个随机唯一数字
- 如何将目录路径转换为唯一的数字标识符 (Linux/C++)
- 标准容器/库,用于存储数字窗口并返回唯一数字的数量
- 在c++中随机生成n以内的唯一数字
- 连续获取 2 个唯一数字
- 测量数组中的唯一数字
- 在编译时生成唯一的数字
- 需要在数组中找到一个唯一的数字
- 如何使用std::find查找唯一的数字
- C++中的唯一数字
- 随机生成n个唯一的数字
- c++ reinterpret_cast,生成唯一的数字
- 进程间在0到255之间的唯一数字
- 从一组集合{{中选择一组数字{1,2,3}.},{.},{.}}使得所有元素都是唯一的
- 在数组中查找唯一的数字
- 通过类型标识符表示类的数字唯一标识符