C++ 为什么当lambda工作时bind什么都不做

C++ 为什么当lambda工作时bind什么都不做,c++,c++11,C++,C++11,我问了最初的问题。现在我有一个后续问题。代码如下: using namespace std::placeholders; using namespace std; struct MyType {}; struct MyType2 {}; ostream& operator<<(ostream &os, const MyType &n) { cout << "MyType" << endl; return os; }

我问了最初的问题。现在我有一个后续问题。代码如下:

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;
}
使用名称空间std::占位符;
使用名称空间std;
结构MyType{};
结构MyType2{};

ostream&operator强制转换无效,您需要强制转换到引用

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

static_cast(::operator强制转换无效,您需要强制转换到引用

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

static_cast(::operator强制转换无效,您需要强制转换到引用

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

static_cast(::operator强制转换无效,您需要强制转换到引用

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

static\u cast(::operator您的代码没有在gcc-4.8上编译,它抱怨对函数类型的转换无效。clang编译代码,但不执行任何操作,不确定那里发生了什么。无论如何,您必须转换为函数指针类型,而不是函数类型

std::for_each(vec.begin(), vec.end(), std::bind((ostream&(*)(ostream&, const MyType&))::operator<<, std::ref(std::cout), _1));
//                                                       ^^^

您的代码没有在gcc-4.8上编译,它抱怨转换为函数类型无效。clang编译代码,但不执行任何操作,不确定那里发生了什么。无论如何,您必须转换为函数指针类型,而不是函数类型

std::for_each(vec.begin(), vec.end(), std::bind((ostream&(*)(ostream&, const MyType&))::operator<<, std::ref(std::cout), _1));
//                                                       ^^^

您的代码没有在gcc-4.8上编译,它抱怨转换为函数类型无效。clang编译代码,但不执行任何操作,不确定那里发生了什么。无论如何,您必须转换为函数指针类型,而不是函数类型

std::for_each(vec.begin(), vec.end(), std::bind((ostream&(*)(ostream&, const MyType&))::operator<<, std::ref(std::cout), _1));
//                                                       ^^^

您的代码没有在gcc-4.8上编译,它抱怨转换为函数类型无效。clang编译代码,但不执行任何操作,不确定那里发生了什么。无论如何,您必须转换为函数指针类型,而不是函数类型

std::for_each(vec.begin(), vec.end(), std::bind((ostream&(*)(ostream&, const MyType&))::operator<<, std::ref(std::cout), _1));
//                                                       ^^^