Я преобразую эту функцию для использования std::tuple
, у которой нет членов first
и second
, таких как std:pair
.
std::type_index argumentType(const std::string& name) const
{
return std::find_if(args_.begin(), args_.end(),
[&name](std::pair<std::string, std::type_index> arg)->bool
{
return arg.first == name;
}
)->second;
}
Меня смущает синтаксис ->second
, что это делает? и три эквивалента std::get<1>(arg)
std::type_index argType(const std::string& name) const
{
return std::find_if(args_.begin(), args_.end(),
[&name](std::tuple<std::string, std::type_index, Attribute> arg)->bool
{
return std::get<0>(arg) == name;
}
)std::get<1>(arg);
Пример 2:
станд:: пара
bool hasArg(const std::string& name) const
{
return std::find_if(args_.begin(), args_.end(),
[&name](std::pair<std::string, std::type_index> arg)->bool
{
return arg.first == name;
}
) != args_.end();
}
станд::кортеж
bool hasArg(const std::string& name) const
{
return std::get<0>(*std::find_if(args_.begin(), args_.end(),
[&name](std::tuple<std::string, std::type_index, Attribute> arg)->bool
{
return std::get<0>(arg) == name;
}
)) != args_.end();
}
std::tuple
иstd::pair
(такжеstd::array
, если хотите), вы можете использоватьstd::get()
также для пар; поэтому для объектаp
типаstd::pair
можно использоватьstd::get<0>(p)
вместоp.first
. - person max66   schedule 28.11.2018