我知道std :: get超载了。我知道要提取一个重载我需要转换为特定的签名。假设我需要一个指向std :: get的指针,它将非const ref从std :: tuple&中返回到第一个元素。以下是我的许多尝试之一(不编译):
auto f = static_cast<
int& (*)(std::tuple<int,int>&) noexcept
>(
&std::get<(size_t)0u, std::tuple<int,int>>
);
我应该如何指定此static_cast?
答案 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);
}