std ::绑定模板函数

时间:2017-08-25 13:33:42

标签: c++11

我有一个函数是一个类的一部分处理一些输入作为迭代器对。签名是:

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));

它编译,但代码很脆弱:如果我更改为向量,那么我将需要绕过更改签名(虽然失败的代码将很容易检测),如果我决定不同的容器会更多比特定用例中的数组更有效,然后它完全中断。

我如何保持绑定泛型而不是绑定到特定的迭代器类型?

0 个答案:

没有答案