gpt4 book ai didi

c++ - 是否有一个通用的 boost::XXX::stream_protocol::socket 可以从 local::stream_protocol::socket 或 ip::tcp::socket 移动构造?

转载 作者:行者123 更新时间:2023-11-30 05:27:09 25 4
gpt4 key购买 nike

我正在设计一个类,它将通过其他人创建并传递给构造函数的 stream_protocol::socket 与对等方通信。 (所以其他人将连接或接受 TCP 连接、本地流套接字或类似的东西,并将套接字提供给我的类构造函数。我的构造函数将移动套接字到一个成员变量,然后用它与另一端的任何人交谈。调用者将留下一个空套接字(因为胆量已移至我的类对象))

This question似乎是个正确的主意,但我无法获得正确的构造函数签名。我正在尝试:

class foo {
public:
/**/ foo( generic::stream_protocol::socket &&s ) : pSock( s ) { }
private:
generic::stream_protocol::socket pSock;
} ;

但是 g++ 提示我使用的是隐式删除的构造函数。 (我想我只是用错误的语法来选择文档所说的存在的移动构造函数。)

bt.hpp: In constructor âbt::peer::peer(boost::asio::generic::stream_protocol::socket&&)â:
bt.hpp:24:31: error: use of deleted function âboost::asio::basic_stream_socket<boost::asio::generic::stream_protocol>::basic_stream_socket(const boost::asio::basic_stream_socket<boost::asio::generic::stream_protocol>&)â
: pSock( s )
^
In file included from /usr/local/include/boost/asio.hpp:31:0,
from utp.hpp:22,
from main.cc:54:
/usr/local/include/boost/asio/basic_stream_socket.hpp:46:7: note: âboost::asio::basic_stream_socket<boost::asio::generic::stream_protocol>::basic_stream_socket(const boost::asio::basic_stream_socket<boost::asio::generic::stream_protocol>&)â is implicitly declared as deleted because âboost::asio::basic_stream_socket<boost::asio::generic::stream_protocol>â declares a move constructor or move assignment operator
class basic_stream_socket
^
<builtin>: recipe for target 'main.o' failed

我打算像这样使用这个类:

ip::tcp::socket tcp_conn( ... );
tcp_conn.connect( ... );
local::stream_protocol::socket local_conn( ... );
local_conn.connect( ... );

foo socket_talker1( tcp_conn );
foo socket_talker2( local_conn );
// Now socket_talker1 and socket_talker2 can talk to the remote parties, and tcp_conn and local_conn are invalid.

最佳答案

确实,您忘记了 std::move():

Live On Coliru

#include <boost/asio.hpp>

namespace impl {
using namespace boost::asio;

class foo {
public:
/**/ foo(generic::stream_protocol::socket &&s) : pSock(std::move(s)) {}

private:
generic::stream_protocol::socket pSock;
};
}

关于c++ - 是否有一个通用的 boost::XXX::stream_protocol::socket 可以从 local::stream_protocol::socket 或 ip::tcp::socket 移动构造?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37506342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com