我有这个宏用于启动数据包
#define BEGIN_PACKET_DEF(name, type) typedef struct name {\
int8_t header;\
static size_t size() { return sizeof(name); }\
name() { memset(this, 0, sizeof(name)); header = type; }
这是结束数据包的
#define END_PACKET_DEF(name) } name;
我想将其更改为c ++函数。
顾名思义是一个定义来启动数据包定义
BEGIN_PACKET_DEF
会在每个数据包中自动添加int8_t header;
使用示例:
BEGIN_PACKET_DEF(Name_struct,HEADER)
// some packet's data
END_PACKET_DEF(Name_packet)
我需要一些帮助来重写那些宏作为C ++函数,并像宏一样做同样的效果,我只是不喜欢使用宏。
答案 0 :(得分:2)
我只是不喜欢使用宏。
这种BEGIN_
END_
类型的宏对是它们罕见的有效用途之一,您通常无法用函数替换它们以达到相同的效果。
在没有宏的情况下,您可以在c ++中获得的最接近的是定义一个可变参数模板结构,它将类型参数转发给std::tuple
。您可以在此处查看我的old question 1 ,了解如何做到这一点。
1) 不关心downvotes,问题是有效的,答案是好的。实际上,这已经被用于生产。