std::vector<int> v1;
std::function<void(const int&)> funct =
static_cast<std::function<void(const int&)>>(std::bind(
&std::vector<int>::push_back,
&v1,
std::placeholders::_1));
Run Code Online (Sandbox Code Playgroud)
这给了我no matching function for call to bind.
我能做到这一点:
threadPool.push_back(std::thread(runThread<lazyFunct>,
std::bind(&LazySkipList<int>::add,
&lsl, std::placeholders::_1), 0, 1000000, 1000000));
Run Code Online (Sandbox Code Playgroud)
我正在使用Xcode 4.4和llvm C++ 11支持.
问题是std::vector::push_back()两个可能的类型签名重载:
void push_back(const T& value);
void push_back(T&& value);
Run Code Online (Sandbox Code Playgroud)
因此,模板参数std::bind()无法推断.但是,您可以显式声明模板参数:
std::bind<void(std::vector<int>::*)(const int&)>(&std::vector<int>::push_back, &v1, std::placeholders::_1);
Run Code Online (Sandbox Code Playgroud)
这解决得很正确.
当然,在这一点上,使用lambda可能更简单:
auto func = [&](int i){ v1.push_back(i); };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1561 次 |
| 最近记录: |