2016-09-16 4 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++ без макроса, чтобы определить VARIADIC шаблон-структуру, которая перенаправляет параметры типа в std::tuple. Вы можете увидеть мой old question вот как это можно сделать.


1) Не заботьтесь о downvotes, вопрос был действительным, и ответ был хорош. Фактически это было использовано для производства.