gpt4 book ai didi

c++ - std::bind 没有按预期工作

转载 作者:太空狗 更新时间:2023-10-29 20:05:39 25 4
gpt4 key购买 nike

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));

这给了我没有匹配的调用绑定(bind)的函数

不过我可以这样做:

threadPool.push_back(std::thread(runThread<lazyFunct>,
std::bind(&LazySkipList<int>::add,
&lsl, std::placeholders::_1), 0, 1000000, 1000000));

我正在使用支持 llvm C++11 的 Xcode 4.4。

最佳答案

问题是 std::vector::push_back() 被两种可能的类型签名重载了:

void push_back(const T& value);
void push_back(T&& value);

因此,无法推断 std::bind() 的模板参数。但是,您可以显式声明模板参数:

std::bind<void(std::vector<int>::*)(const int&)>(&std::vector<int>::push_back, &v1, std::placeholders::_1);

这会正确解析。

当然,此时使用 lambda 可能更简单:

auto func = [&](int i){ v1.push_back(i); };

关于c++ - std::bind 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12344395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com