在 std::for_each 中使用 std::get<>()

Car*_*bou 2 c++ c++11 visual-studio-2012

我有一个正在循环迭代的地图std::for_each。我使用嵌套绑定和简单的辅助函数来获取我需要的对的元素。这必须可以在 c++11 之前的代码中使用。

typedef std::map<int, Foo> MapType;

std::for_each( 
    testMap.begin() , 
    testMap.end() , 
    std::bind( 
      &Foo::myIncredibleFunction ,  
      std::bind( 
          &ValueExtractor< MapType::key_type , MapType::mapped_type >::getValue, 
          std::placeholders::_1 )));
Run Code Online (Sandbox Code Playgroud)

这很好用(尽管我确信可以改进)

我还将当前代码库从当前级别迁移到 C++11,因此我正在考虑是否可以使用该语言的新功能来改进代码(可读性、效率)。例如,我尝试了以下操作(未成功 - 请参阅下面的模板错误)

std::for_each( 
    testMap.begin() , 
    testMap.end() , 
    std::bind( 
        &Foo::myIncredibleFunction ,  
        std::get<1>(  std::placeholders::_1 )));
Run Code Online (Sandbox Code Playgroud)

错误

    1>d:\projects\test_bind\test_bind\test_bind.cpp(48): error C2780:
    std::bind ...<Snip>...
    : expects 6 arguments - 2 provided
Run Code Online (Sandbox Code Playgroud)

智能感知还具有以下功能:

IntelliSense: no instance of overloaded function "std::get" matches the argument list
argument types are: (std::_Ph<1>)   
Run Code Online (Sandbox Code Playgroud)

我尝试了各种用法组合来std:get<1>()尝试替换我的内部绑定,但没有成功。我怀疑我没有正确理解这一点,但感觉我应该能够做我想做的事。有没有办法使用std::get调用而不使用辅助函数/函子来执行此操作?

编辑:我认为 KennyTM 已经就我在代码中实际执行的操作提出了我的答案,它比我的方法好得多。我仍然对std::get<>上面是否可以使用或为什么不感兴趣感兴趣。