将推断类型传递给std :: find_if lambda函数

Col*_*ett 2 c++ lambda c++11

我有以下代码.我试图消除将localization_data_t::language_t类型显式传递给lambda参数的需要.

auto language_itr = std::find_if(languages.begin(), languages.end(), [&](const localization_data_t::language_t& language)
{
    return language.code == language_code;
});
Run Code Online (Sandbox Code Playgroud)

我假设有一种方法可以做到这一点,因为要迭代的对象的类型可以由编译器通过迭代器的底层类型派生.但是,我在旅行中没有找到这样的例子.

任何帮助,将不胜感激.

Rap*_*ptz 7

你可以decltype在C++ 11中使用:

auto result = std::find_if(v.begin(), v.end(), [](const decltype(*v.begin())& t) { /*   */ });
Run Code Online (Sandbox Code Playgroud)

在C++ 1y中你可以使用auto.

auto result = std::find_if(v.begin(), v.end(), [](const auto& t) { /*   */ });
Run Code Online (Sandbox Code Playgroud)

还有,std::iterator_traits但它更冗长.