1
我是新來的C++,特別是模板。我試圖使用bind來重載模板函數 - 實際函數是serial_port :: set_option。現在我已經達到以下形式:std爲重載模板函數綁定
auto f = std::bind(static_cast<boost::system::error_code(serial_port::*)
(const SettableSerialPortOption&,boost::system::error_code&)>
(&serial_port::set_option),sp_ptr,_1,ec);
與sp_ptr定義爲:
std::shared_ptr<serial_port> sp_ptr;
重載方法定義是:
template<
typename SettableSerialPortOption>
boost::system::error_code set_option(
const SettableSerialPortOption & option,
boost::system::error_code & ec);
我的目的是得到這樣的電話:
f(boost::asio::serial_port::baud_rate(9600));
工作。我不知道在哪裏定義名稱SettableSerialPortOption。你能提供一些幫助嗎?更新: 我能夠做到這一點的:
auto &local_ptr = sp_ptr;
auto f = [local_ptr,&ec] (auto a){local_ptr->set_option(a,ec);};
f(baud_rate);
感謝彼得·Skotnicki的解決方案。
不會'std :: bin(static_cast <...>(...),sp_ptr.get(),...)'工作嗎? – YSC
甚至'std :: bin(static_cast <...>(...),* sp_ptr.get(),...)' – YSC
我想'SettableSerialPortOption'不是一個具體的類型嗎?因爲你需要一個通用的lambda(C++ 14),或者一個自定義函子 –