gpt4 book ai didi

c++ - 为什么 bind 在 lambda 工作时什么都不做

转载 作者:行者123 更新时间:2023-11-28 00:28:32 25 4
gpt4 key购买 nike

我问了最初的问题 before .现在我有一个后续问题。这是代码:

using namespace std::placeholders;
using namespace std;

struct MyType {};
struct MyType2 {};

ostream& operator<<(ostream &os, const MyType &n)
{
cout << "MyType" << endl;
return os;
}

ostream& operator<<(ostream &os, const MyType2 &n)
{
cout << "MyType2" << endl;
return os;
}

int main()
{
std::vector<MyType> vec;
MyType mt;
vec.push_back(mt);

std::for_each(vec.begin(), vec.end(), [](const MyType &mt) {cout << mt;}); // this works
std::for_each(vec.begin(), vec.end(), std::bind((ostream&(ostream&, const MyType&))::operator<<, std::ref(std::cout), _1)); // this does nothing !

return 0;
}

您明白为什么 lambda 起作用而绑定(bind)实现什么都不做吗?它编译,但不执行任何操作。

最佳答案

转换无效,需要转换为引用

static_cast<ostream&(&)(ostream&, const MyType&)>(::operator<<)

或者指向一个指针

static_cast<ostream&(*)(ostream&, const MyType&)>(&::operator<<)

两者都适用于 std::bind

Live example

请注意,您的原始代码已被 Coliru 的 GCC 4.8 拒绝。

关于c++ - 为什么 bind 在 lambda 工作时什么都不做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23895930/

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