如何获取指向std :: get&lt; 0,tuple <int,int>&gt;)的指针?</int,int>

时间:2012-07-26 12:46:33

标签: c++ c++11 tuples function-pointers

我知道std :: get超载了。我知道要提取一个重载我需要转换为特定的签名。假设我需要一个指向std :: get的指针,它将非const ref从std :: tuple&amp;中返回到第一个元素。以下是我的许多尝试之一(不编译):

auto f = static_cast<
    int& (*)(std::tuple<int,int>&) noexcept
>(
    &std::get<(size_t)0u, std::tuple<int,int>>
);

我应该如何指定此static_cast?

2 个答案:

答案 0 :(得分:7)

元组get的签名是(直接取自libstdc ++):

 template<std::size_t __i, typename... _Elements>
    constexpr typename __add_ref<     
                      typename tuple_element<__i, tuple<_Elements...>>::type 
                    >::type 
    get(tuple<_Elements...>& __t) noexcept

因此得到的模板参数是元组的不同类型,而不是元组,所以你从地址中获取的函数应该是:

&std::get<(size_t)0u,int,int> 

答案 1 :(得分:3)

您是否需要指向实际的std :: get或具有相同行为的任何函数的指针?如果是这样,你可以将它包装在lambda中:

auto f = [](std::tuple<int,int>& tuple) -> int&
{
    return std::get<0>(tuple);
}