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<>上面是否可以使用或为什么不感兴趣感兴趣。
既然您已经在使用 C++11,为什么不使用基于范围的 for 循环( VS 2012支持)?
for (auto&& item : testMap) {
item.second.myIncredibleFunction();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1626 次 |
| 最近记录: |