小编val*_*y_l的帖子

将右值引用传递给 boost::in_place 函数

我是 C++ 中右值引用的新手,想学习如何在日常生活中使用它们。我有两个关于流行用例的相关问题:使用带有 boost::in_place 和 boost::bind 的右值引用。

  1. 在 boost::in_place 中使用右值引用

考虑一个类,构造函数将右值引用作为参数:

struct A
    : boost::noncopyable 
{
    A(int&&){}
};
Run Code Online (Sandbox Code Playgroud)

现在让我们尝试为这个类创建 boost 可选变量:

void foo(int&& value)
{
    boost::optional<A> opt;
    // some code here 
    opt = boost::in_place(std::forward<int>(value)); //Error!
}
Run Code Online (Sandbox Code Playgroud)

在这样的例子中传递 rvalue ref 的正确方法是什么。有没有类似 boost::reference_wrapper 的解决方案用于右值引用?

  1. 将绑定函子传递给具有右值引用的函数对象

另一个常见的用例是将 boost::bind 函子对象分配给 boost::function 对象。

void foo(int&&)
{
}

void bar()
{
    boost::function<void(int&&)> func;

    int x = 0;
    func = boost::bind(foo, std::move(x)); // Compilation error (a)

    func = boost::bind(foo, _1); // Compilation error too (b)
}
Run Code Online (Sandbox Code Playgroud)

我知道指令 …

c++ boost rvalue-reference c++11

5
推荐指数
1
解决办法
1463
查看次数

如何拆分使用boost asio udp套接字联合数据报

我用boost :: asio udp套接字创建了我的UDP服务器和客户端.在我开始发送更多数据报之前,一切看起来都不错.它们从客户端正确到达服务器.但是,他们在我的缓冲区中联合成一条消息.

我用

udp::socket::async_receivestd::array<char, 1 << 18 >缓冲区

用于制作异步请求.并通过回调接收数据

void on_receive(const error_code& code, size_t bytes_transferred)

如果我经常发送数据(每10毫秒),我会在上面的回调中同时收到几个数据报到我的缓冲区.问题是 - 如何分开它们?注意:我的UDP数据报具有可变长度.我不想使用带有大小的附加标头,因为它会使我的代码对第三方数据报无用.

sockets udp datagram boost-asio

5
推荐指数
1
解决办法
1062
查看次数

标签 统计

boost ×1

boost-asio ×1

c++ ×1

c++11 ×1

datagram ×1

rvalue-reference ×1

sockets ×1

udp ×1