2016-09-16 45 views
1

我这个宏开始分组的写宏作为C++函数

#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

一个提示可能是要求您的编译器在预处理后显示源文本 - 因为它包含扩展的宏... – Dilettant

回答

2

我只是不喜欢使用宏。

这种BEGIN_END_类型宏对是他们难得的有效用途之一,而你一般不能用函数代替他们来达到同样的效果。


你可以在C中得到的最接近++没有一个宏,是定义一个可变参数模板结构,转发该类型参数的std::tuple。你可以在这里看到我的old question 如何做到这一点。


1)不要在乎downvotes,问题是有效的,答案是好的。其实这已经习惯了生产。