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

时间:2017-02-03 11:45:59

标签: c++ c++03

有没有办法,仅使用C ++ 03标准函数获得std::pair成员,即firstsecond

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

2 个答案:

答案 0 :(得分:7)

没有免费功能可让您检索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

答案 1 :(得分:2)

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