使用std :: tr1 :: bind与std :: vector :: push_back

mag*_*nta 2 c++ bind visual-studio-2010

为什么我的VS2010无法编译此代码:

#include <functional>
#include <vector>
int main()
{
    std::vector<int> vec;
    std::bind(&std::vector<int>::push_back, std::ref(vec), 1)();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Ron*_*hke 5

您应该更具体地说明为什么这似乎不适合您.

#include <iostream>
#include <tr1/functional>
#include <vector>

int main(int argc, char* argv[]) {
    std::vector<int> vec;
    std::tr1::bind(&std::vector<int>::push_back, std::tr1::ref(vec), 1)();
    std::cout << "vec.size = " << vec.size() << std::endl;
    std::cout << "vec[0] = " << vec[0] << std::endl;
    return 0;
}

$ gcc -o test -lstdc++ test.cpp && ./test
vec.size = 1
vec[0] = 1
Run Code Online (Sandbox Code Playgroud)

更新: Luc Danton是对的,这里的问题是超载push_back.请参阅问题VS2010是否存在boost :: bind问题?.另请注意,问题不仅限于push_back,请参阅Visual Studio 2010和boost :: bind.