我有一个宏函数,它带有一个名称,旨在从各种命名空间中调用。我想确保此名称在全球范围内是唯一的。定义看起来像这样:
#define DECLARE_NEW_MYVAR( Name ) static MyVar Name( #Name )
我希望这个静态变量被命名空间(这就是为什么我希望从各种命名空间调用它),但我还需要确保传递给 MyVar 的构造函数的字符串是全局唯一的。这是因为我要序列化这个值并且我需要能够正确地将它关联回来。
我尝试了一些没有成功的事情:
强制它是唯一的:根据一些信息在名称上附加一些东西来强制它是唯一的
- 使用
__COUNTER__
宏:我的目标编译器之一没有这个宏。此外,假设调用宏的顺序相同似乎很危险 - 使用
__FILE__
宏:它具有完整的文件路径,可以确保它是唯一的,但是如果从不同的地方或不同的机器编译,反序列化将不再起作用。
检查它是否是唯一的:将它留给调用者让它是全局唯一的,如果不是,让编译器抱怨
- 我正在寻找一种方法来从命名空间内声明全局命名空间中的某些内容,这样如果它们不使其唯一,我至少可以导致多重定义的符号。我想不出办法来做到这一点。
基本上我需要想出一个全局唯一的字符串来传递给 MyVar ,我可以相信它不会在不同的编译之间发生变化,最好不会在代码更改之间发生变化(只要特定调用没有改变)。
有谁知道如何做到这一点?