Замена / портирование memset на C ++ с C

Я хочу портировать вызовы C из примера C в пример C ++. Но я не уверен, что это правильный способ сделать это. В части memset, что я должен заменить для кода C ++?

static int begin_request_handler(struct mg_connection *conn) {

return 1;
}struct mg_callbacks {
int  (*begin_request)(struct mg_connection *);
void (*end_request)(const struct mg_connection *, int reply_status_code);
int  (*log_message)(const struct mg_connection *, const char *message);
int  (*init_ssl)(void *ssl_context);
int (*websocket_connect)(const struct mg_connection *);
void (*websocket_ready)(struct mg_connection *);
int  (*websocket_data)(struct mg_connection *);
const char * (*open_file)(const struct mg_connection *,
const char *path, size_t *data_len);
void (*init_lua)(struct mg_connection *, void *lua_context);
void (*upload)(struct mg_connection *, const char *file_name);
};struct mg_callbacks callbacks;
memset(&callbacks, 0, sizeof(callbacks));
callbacks.begin_request = begin_request_handler;

Как должен выглядеть memset, если я вызываю его из C ++?

0

Решение

Хорошо, так, как я хотел бы это так:

struct mg_callbacks callbacks = { };

Это заполнит его нулевыми значениями.

Но memset это прекрасно — C ++ разработан так, чтобы принимать код на C с небольшими изменениями или без них, поэтому, если вам НЕ НУЖНО что-либо менять, я не вижу реальной причины для изменения кода.

Конечно, вы также можете объявить конструктор в mg_callbacks который устанавливает каждый из указателей на NULLнапример,

struct mg_callbacks
{
mg_callbacks()
{
begin_request = NULL;
...
}
...
};

Это гарантирует, что ни один код не забудет «memset».

Конечно, вся эта структура выглядит так, как будто она должна быть базовым классом с виртуальными функциями, которые затем реализуются специально для любых других целей, которые у вас есть в производном классе. Но это не имеет ничего общего с использованием memset в качестве таких.

3

Другие решения

Вы можете использовать memset в C ++, если хотите, но если вам нужен идиоматический метод C ++ для установки блока памяти, тогда вам нужен std :: fill.

0

По вопросам рекламы [email protected]