假设我有一个带有成员变量的类:
std::unordered_map<KeyType, std::shared_ptr<ValueType>> myMap
Run Code Online (Sandbox Code Playgroud)
在一个成员函数中,我想做以下事情:
std::for_each(myMap.begin(), myMap.end(), [](std::pair<const KeyType, std::shared_ptr<ValueType>>& pair){pair.second->someMethod(); });
Run Code Online (Sandbox Code Playgroud)
无论如何缩短lambda表达式?我以为我可以这样做,但它不是有效的语法:
std::for_each(myMap.begin(), myMap.end(), [](decltype(myMap::valueType)& pair){pair.second->someMethod(); });
Run Code Online (Sandbox Code Playgroud)
我根本不会打扰一个lambda.与其他标准算法不同,for_each()它不比等效的更具表现力或可读性for.
for (auto& p : myMap)
p.second->someMethod();
for (auto p = myMap.begin(); p != myMap.end(); ++p)
p->second->someMethod();
Run Code Online (Sandbox Code Playgroud)
我推荐typedef像assoc容器这样的复杂模板,因此你可以这样做:
typedef std::unordered_map<KeyType, std::shared_ptr<ValueType>> map_type;
map_type myMap;
//do with map
std::for_each(myMap.begin(), myMap.end(),
[](typename map_type::value_type& pair){
pair.second->someMethod();
});
Run Code Online (Sandbox Code Playgroud)
或没有typedef
std::for_each(myMap.begin(), myMap.end(),
[](typename decltype(myMap)::value_type& pair){
pair.second->someMethod();
});
Run Code Online (Sandbox Code Playgroud)
decltype获取对象的类型,您需要使用模板化类中定义的typename,为此,您可以使用typename关键字.如果模板专门化没有该typedef,则这是必需的.
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |