我正在为游戏解析一些结构。我知道关于结构的大部分内容,但有各种我不知道的事情,我也不关心它们。但是我在解析时需要它们,所以事情排成一行。例如:
template <unsigned int Size>
class unknown
{
BYTE data[Size];
};
struct s_object
{
int stuff;
unknown<100> unk1;
int otherstuff;
unknown<200> unk2;
};
这是一个人为的例子,但它显示了我想要做的事情。我不想为成员unk1
和unk2
命名。理想情况下,我想这样做
struct s_object
{
int stuff;
unknown<100>;
int otherstuff;
unknown<200>;
};
但当然这不起作用。有没有办法让编译器生成随机名称,不使用名称,或者只是将其视为填充?
答案 0 :(得分:2)
编辑:即使GCC也不允许你这样做!校正。
一般来说,没有。您可以使用__FILE__
,__LINE__
和/或__COUNTER__
(后者是另一个编译器扩展,但在GCC和MSVC等支持)为您命名字段来组合宏。 ,如果你真的想要。
答案 1 :(得分:1)
您可以使用__COUNTER__
宏(但需要一些预处理器技巧)。它由GCC,Visual C++和其他人实施。
然后,您可以定义一个名为的宏,例如_
,在使用时会扩展为_unused_15
,_unused_16
等等。有了它,您的代码将变为:
struct s_object
{
int stuff;
unknown<100> _;
int otherstuff;
unknown<200> _;
};
诡计,即
#define CAT(a,b) a##b
#define CAT_DELAYED(a,b) CAT(a,b)
#define _ CAT_DELAYED(_unused_,__COUNTER__)
答案 2 :(得分:1)
如果你真的必须“自动地”这样做,这样的事情就可以了:
#define UNKNOWNY(line, size) char unknown_##line[(size)]
#define UNKNOWNX(line, size) UNKNOWNY(line, size)
#define UNKNOWN(size) UNKNOWNX(__LINE__, size)
但我真的没有看到这比写char unknown1[100]
更好。你知道的时间不长 - 你可以随时复制/粘贴。
修改:添加额外级别的#define
。
答案 3 :(得分:0)