我想做的是:
template <typename KeyType, typename Getter>
void one_function(KeyType& input,
Getter getter)
{
std::cout << "inside one function " << getter(input) << std::endl;
}
int main(int argc, const char * argv[]) {
auto aMap = std::unordered_map<std::string, std::pair<std::string, std::string> > { {"key1",{"value1_1","value1_2"} }, {"key2",{"value2_1","value2_2"}}};
auto value_1_2 = one_function(aMap["key1"], std::get<1>);
}
我想将std::get<1>
传递给函数以提取元组/对的第二个元素。我知道如何用lambdas做到这一点,但我很好奇我如何使用std::get
。
注意:通过使用我自己的get
函数,我可以将其传递给one_function
,但我不知道如何通过标准库版本
答案 0 :(得分:4)
get
有很多重载,所以你必须指定正确的:
one_function(aMap["key1"],
static_cast<std::string&(*)(std::pair<std::string, std::string>&)>(&std::get<1>));
在C ++ 14中使用lambda更具可读性:
one_function(aMap["key1"], [](auto& p){ return std::get<1>(p); });