将宏重写为 C++ 函数?
Rewrite macro as c++ function?
我想将此宏重写为 C++ 函数。
#define SAFE_BUFFER_DELETE(buf) { if(buf != NULL) { buffer_delete(buf); buf = NULL; } }
附加信息http://paste.ubuntu.com/13940691/
关于 .header 文件
void buffer_read(LPBUFFER buffer, void * buf, int bytes) {
thecore_memcpy(buf, buffer->read_point, bytes);
buffer_read_proceed(buffer, bytes);
}
void buffer_delete(LPBUFFER buffer) {
if (buffer == NULL) {
return;
}
buffer_reset(buffer);
int size = buffer->mem_size;
int pool_index = buffer_get_exac_pool_index(size);
if (pool_index >= 0) {
BUFFER** buffer_pool = normalized_buffer_pool + pool_index;
buffer->next = *buffer_pool;
*buffer_pool = buffer;
} else {
free(buffer->mem_data);
free(buffer);
}
}
通过查看 buffer_delete
的源代码,很明显 if (buf != NULL)
的检查是完全多余的。所以摆脱它。
完成后,宏会做两件事。
- 对其参数调用
buffer_delete
- 将
NULL
赋值给它的参数
如何在函数中做第一件事很清楚。在 C++ 中,一个函数也可以接受一个参数作为引用,因此可以修改它。你的函数看起来像这样。
inline void
safe_delete_buffer(LPBUFFER& buf)
{
buffer_delete(buf);
buf = nullptr;
}
我假设 LPBUFFER
是某个指针类型的 typedef
。
这种功能的行为对用户是否有用和直观是另一个问题。
我想将此宏重写为 C++ 函数。
#define SAFE_BUFFER_DELETE(buf) { if(buf != NULL) { buffer_delete(buf); buf = NULL; } }
附加信息http://paste.ubuntu.com/13940691/ 关于 .header 文件
void buffer_read(LPBUFFER buffer, void * buf, int bytes) {
thecore_memcpy(buf, buffer->read_point, bytes);
buffer_read_proceed(buffer, bytes);
}
void buffer_delete(LPBUFFER buffer) {
if (buffer == NULL) {
return;
}
buffer_reset(buffer);
int size = buffer->mem_size;
int pool_index = buffer_get_exac_pool_index(size);
if (pool_index >= 0) {
BUFFER** buffer_pool = normalized_buffer_pool + pool_index;
buffer->next = *buffer_pool;
*buffer_pool = buffer;
} else {
free(buffer->mem_data);
free(buffer);
}
}
通过查看 buffer_delete
的源代码,很明显 if (buf != NULL)
的检查是完全多余的。所以摆脱它。
完成后,宏会做两件事。
- 对其参数调用
buffer_delete
- 将
NULL
赋值给它的参数
如何在函数中做第一件事很清楚。在 C++ 中,一个函数也可以接受一个参数作为引用,因此可以修改它。你的函数看起来像这样。
inline void
safe_delete_buffer(LPBUFFER& buf)
{
buffer_delete(buf);
buf = nullptr;
}
我假设 LPBUFFER
是某个指针类型的 typedef
。
这种功能的行为对用户是否有用和直观是另一个问题。