Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将宏写为c++;功能_C++_Macros - Fatal编程技术网

C++ 将宏写为c++;功能

C++ 将宏写为c++;功能,c++,macros,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

我有这个宏用于起始数据包

#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头

用法示例:

    BEGIN_PACKET_DEF(Name_struct,HEADER)
 // some packet's data
   END_PACKET_DEF(Name_packet)
我需要一些帮助来重写那些宏,如C++函数,和宏一样的效果,我不喜欢使用宏。 我只是不喜欢用宏

这种类型的
开始
结束
宏对是它们罕见的有效用途之一,通常不能用函数替换它们以达到相同的效果


没有C++的C++中最接近的是定义一个变量模板结构,它将类型参数转发给<代码> STD::tuple < /C>。你可以在这里看到我的1如何做到这一点



1) 不要在意落选,这个问题是正确的,答案是好的。实际上,这已经用于生产。

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