C++11 std::pair到第二个元素上的引用的隐式转换

C++11 std::pair到第二个元素上的引用的隐式转换,c++11,stl,C++11,Stl,我有一个类型为std::pair的对象,希望定义一个到第二个元素的引用的隐式转换 T& convert(std::pair<Key, T>& it) { return it.second; } T const& convert(std::pair<Key, T> const& it) { return it.second; } 这可以在类T的定义中隐式实现吗 是和否 是部分:创建一个转换构造函数 class T { public:

我有一个类型为std::pair的对象,希望定义一个到第二个元素的引用的隐式转换

T& convert(std::pair<Key, T>& it) { return it.second; }
T const& convert(std::pair<Key, T> const& it) { return it.second; }
这可以在类T的定义中隐式实现吗

是和否

是部分:创建一个转换构造函数

class T 
{
  public: 
    // Use a delegating constructor to implement shi
    template <typename Key> T(std::pair<Key, T> const& item) : T(item.second) {}
};

不同的问题,但当我阅读代码时,名为it的变量强烈建议使用迭代器,而您的则不是。建议为地图的元素键值对找到一个更好的名称。顺便说一句,这似乎真的是一个XY问题。与其搞乱这些对,为什么不在这些值上运行foreach呢?请参阅auto&v:container | boost::adapters::map_values的语法。感谢您指出这个boost技巧,我不知道。如果容器是std::vector,它也可以工作吗?关于变量的名称:它是一个未引用的迭代器,与名称的含义相差不远。当然,它不是容器的值类型,这是我想要强调的。不幸的是,根据C++标准选择的术语,对是无序映射的值类型。key_type是显而易见的,mapped_type是给TValue的名称。当然,我们知道你的意思。适配器还有一个函数版本,用法类似于auto&v:boost::Adapters::valuescontainer,编写重载应该非常简单,它返回集合本身作为向量输入,返回boost::Adapters::valuescontainer作为映射类型的结果。感谢使用重载的想法,尽管我有很多这样的函数,但我还是会这么做。具有转换构造函数的第一个计划不起作用,因为我需要更改元素的数据。
class T 
{
  public: 
    // Use a delegating constructor to implement shi
    template <typename Key> T(std::pair<Key, T> const& item) : T(item.second) {}
};
void func(T&);

template <typename Key>
void func(std::pair<Key, T>& item)
{
    func(item.second);
}