在 C++03 中仅使用标准函数获取 std::pair 成员

Get std::pair member using only standard function in C++03

有没有办法,只使用 C++03 标准函数得到一个 std::pair 成员,即 firstsecond

在 C++11 中,我可以在这种情况下分别使用 std::get<0>std::get<1>

不,没有。如果你想要它们,你必须自己制作它们。

没有可让您检索 std::pair::firststd::pair::second 的免费功能。然而,实现起来很简单:

template <std::size_t TI, typename T>
struct get_helper;

template <typename T>
struct get_helper<0, T>
{
    typedef typename T::first_type return_type;

    return_type operator()(T& pair) const
    {
        return pair.first;
    }
};

template <typename T>
struct get_helper<1, T>
{
    typedef typename T::second_type return_type;

    return_type operator()(T& pair) const
    {
        return pair.second;
    }
};

template <std::size_t TI, typename T>
typename get_helper<TI, T>::return_type my_get(T& pair)
{
    return get_helper<TI, T>()(pair);
}

coliru example