将宏写为c ++函数

时间:2016-09-16 15:53:59

标签: c++ macros

我有这个宏用于启动数据包

#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 ++函数,并像宏一样做同样的效果,我只是不喜欢使用宏。

1 个答案:

答案 0 :(得分:2)

  

我只是不喜欢使用宏。

这种BEGIN_ END_类型的宏对是它们罕见的有效用途之一,您通常无法用函数替换它们以达到相同的效果。

在没有宏的情况下,您可以在c ++中获得的最接近的是定义一个可变参数模板结构,它将类型参数转发给std::tuple。您可以在此处查看我的old question 1 ,了解如何做到这一点。

1) 不关心downvotes,问题是有效的,答案是好的。实际上,这已经被用于生产。