シリアル ポートから読み取る専用スレッドで実行される関数を作成しようとしています。しかし、接続をスレッドに渡すのに問題があります。コードを次の例に減らしました。
#include <thread>
#include <boost/asio.hpp>
template <typename Port>
void serial_read( Port& port) {}
int main()
{
boost::asio::io_service serial_io;
boost::asio::serial_port port( serial_io );
port.open( "/dev/ttyUSB0" );
std::thread s( serial_read<boost::asio::serial_port>, port );
return 0;
}
ただし、次のエラー メッセージが表示されます。
/usr/include/c++/4.7/tuple:128:25: error: use of deleted function ‘boost::asio::basic_serial_port<>::basic_serial_port(const boost::asio::basic_serial_port<>&)’
In file included from /usr/include/boost/asio.hpp:25:0,
from main.cpp:2:
/usr/include/boost/asio/basic_serial_port.hpp:47:7: note: ‘boost::asio::basic_serial_port<>::basic_serial_port(const boost::asio::basic_serial_port<>&)’ is implicitly declared as deleted because ‘boost::asio::basic_serial_port<>’ declares a move constructor or move assignment operator
エラーメッセージは非常に明確です。移動コンストラクターの宣言により削除されたために存在しないオブジェクトを使用しようとしています。しかし、ここで何が起こっているのか、正しく行う方法はまだわかりません。誰かが私を啓発できますか?