如何将std :: get作为参数传递给模板化函数?

时间:2014-12-15 07:30:38

标签: c++ c++11

我想做的是:

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,但我不知道如何通过标准库版本

1 个答案:

答案 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); });

Live example