【发布时间】:2013-06-17 05:57:59
【问题描述】:
给定一个类似的函数
void MyFunction(std::unique_ptr<int> arg);
不可能(MSVC 2012)创建类似的仿函数
std::function<void(std::unique_ptr<int>)> f = std::bind(&MyFunction, std::placeholders::_1);
问题不在于绑定 - 使用 auto f = std::bind(...) 有效。此外,使用shared_ptr 也可以
- 为什么不允许 unique_ptr?
- 这是 MSVC 问题还是一般 C++11 限制?
- 是否有不更改函数定义的解决方法?
【问题讨论】:
-
请注意,这与已解决的
std::bind(&MyFunction, std::unique_ptr())不同,例如stackoverflow.com/questions/9955714/… -
“不可能创建仿函数”是什么意思?你的代码完美地为我编译。 Example.
-
问题已更新编译器信息,您使用 gcc 吗?
-
g++ 和 clang++。你能发布一个编译器错误吗?
-
一百万行模板错误,最嵌套的是:
VC\include\functional(1152): error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>- 所以似乎正在某个地方尝试复制,我不会认为在这种情况下这是必要的。如果你让它在 g++ 中工作,这似乎是特定于 MS 的,考虑到对 C++11 的支持程度不同,这并不奇怪
标签: c++ c++11 unique-ptr std-function stdbind