我有一个函数是一个类的一部分处理一些输入作为迭代器对。签名是:
class Obj {
public:
template <typename InputIterator>
void handle_read(InputIterator first, InputIterator last);
...
};
我想将它绑定到一个函数:
void Obj::handle_connect() {
connections.start(std::make_shared<connection>(std::move(socket), connections, logger),
std::bind(&server::handle_read<InputIterator>, this, std::placeholders::_1, std::placeholders::_2));
}
然而,这不起作用,特别是错误表明它无法找到InputIterator。
但是,如果我将绑定的确切签名放在:
std::bind(&server::handle_read<std::array<uint8_t, 8192>::iterator>, this, std::placeholders::_1, std::placeholders::_2));
它编译,但代码很脆弱:如果我更改为向量,那么我将需要绕过更改签名(虽然失败的代码将很容易检测),如果我决定不同的容器会更多比特定用例中的数组更有效,然后它完全中断。
我如何保持绑定泛型而不是绑定到特定的迭代器类型?