将unique_ptr传递给函数对象
Passing unique_ptr to function object
无法编译下面的代码。我创建了一个函数对象,并尝试传递一个唯一的指针,但编译器抱怨说我试图访问unique_ptr中的私有数据。这发生在msvc 2012 v110中。
class Work
{
};
class A
{
public:
void doWork(Work w)
{
std::cout << " - - ";
return;
}
void doWork2(std::unique_ptr<Work> w)
{
std::cout << " - - ";
return;
}
};
int main()
{
A a;
std::unique_ptr<Work> w2 = std::unique_ptr<Work>(new Work());
Work w;
auto func = std::bind(&A::doWork, a, std::placeholders::_1);
auto func2 = std::bind(&A::doWork2, a, std::placeholders::_1);
func(w);
func2(std::move(w2));
return 0;
}
这看起来像是VC中的一个bug。参见Microsoft Connect的bug报告。
似乎VC传递占位符参数作为左值引用,而不是使用完美转发。
该示例在gcc上可以很好地编译(coliru上的实时示例)。
作为一种变通方法,您可以使用lambda代替std::bind
:
auto func2 = [&a](std::unique_ptr<Work> w) { a.doWork2(std::move(w)); };
相关文章:
- 如何使用单独文件中的派生类访问友元函数对象
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- 有没有办法将重载的类函数绑定到函数对象?
- 将指针传递到成员的指针,从模板参数包到函数对象
- 如何在类模板的成员函数中正确调用函数对象?正在生成 Visual Studio 编译器错误 C2440
- 隐式转换为比较函数对象(函子)用于 std::sort 而不是 std::map?
- C++使用函数对象的线程,如何调用多个析构函数而不是构造函数?
- 如何通过接口将函子分配给函数对象
- 对std::函数对象的调用不匹配,该对象是指向成员函数的指针
- 指向std::invoke中成员函数对象的指针
- 如何成功地将函数对象(或lambda)传递给trackbar回调的第二个参数(void*)
- "std::function"的简单版本:函数对象的生存期?
- C++ 将函数对象作为左值和/或右值传递
- SFINAE 用于具有默认参数的函数对象
- 构造函数对象赋值是否泄漏内存
- 如何发送通过绑定到函数/方法创建的函数对象?
- std::for_each 与函数对象
- 将函数对象传递给 std::function
- 访问执行策略for_each函数对象中的迭代器
- 通过C++函数对象类访问参数