我是 C++ 中右值引用的新手,想学习如何在日常生活中使用它们。我有两个关于流行用例的相关问题:使用带有 boost::in_place 和 boost::bind 的右值引用。
- 在 boost::in_place 中使用右值 ref
考虑一个类,构造函数将右值引用作为参数:
struct A
: boost::noncopyable
{
A(int&&){}
};
现在让我们尝试为这个类创建 boost 可选变量:
void foo(int&& value)
{
boost::optional<A> opt;
// some code here
opt = boost::in_place(std::forward<int>(value)); //Error!
}
在这样的示例中,传递右值 ref 的正确方法是什么。对于右值引用,有没有像 boost::reference_wrapper 这样的解决方案?
- 将绑定函子传递给具有右值引用的函数对象
另一个常见的用例是将 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)
}
我知道指令 (a) 在第一次调用后可能会导致未定义的变量值,但指令 (b) 甚至没有这样的问题。但是如何正确编写这段代码呢?