【发布时间】:2015-01-27 06:14:50
【问题描述】:
我有一个函数,无论我调用 read(...) 还是 write(...) 来处理与文件描述符之间的传输,它的行为几乎相同。我想写一个这样的函数:
uint32_t handleTX(ssize_t (*func)(int, void *, size_t));
我还有两个功能:
uint32_t myRead() { return handleTX(::read); }
uint32_t myWrite() { return handleTX(::write); }
这是使用 unistd.h 中声明的函数。问题在于 write(...) 使用 'const void *buf' 而 read(...) 使用 'void *buf'。因此这两个函数签名不匹配。有没有办法可以将函数签名转换为使它们匹配的东西?我想过将函数指针转换为 (void *),但它似乎不是最优雅的。或者,我可以将 handleTX(...) 设为宏,但它又不是很干净。还有其他建议吗?
【问题讨论】:
-
read和write函数可能具有 相似 签名,但它们在语义上非常不同(如它们的参数所示)。handleTX将如何处理这些截然不同的功能? -
至于你的问题,你可能想看看有多少标准 C++ 函数处理未知的“函数”,例如
std::for_each。
标签: c++ function pointers constants