【发布时间】:2016-03-03 15:29:41
【问题描述】:
我有一个键类型 std::pair<Foo,Bar> 和值 in 的映射,我想通过将 std::pair<std::pair<Foo,Bar> , int> 对像这样 (online source) 传递给插入函数来将其插入到映射中
struct Foo{};
struct Bar{};
typedef std::pair<Foo,Bar> FooBar;
typedef std::pair<FooBar,int> FooBarPair;
typedef std::map<FooBar,int> FooBarMap;
struct FooBarData
{
operator const FooBarPair() const
{
return std::make_pair( std::make_pair( m_foo , m_bar ) , m_num );
}
private:
int m_num;
Foo m_foo;
Bar m_bar;
};
int main()
{
FooBarData fbd;
FooBarMap fbm;
fbm.insert( fbd );
}
clang 错误信息
/usr/include/c++/v1/map:1041:9: note: candidate function not viable: no known conversion from 'FooBarData' to 'const value_type' (aka 'const pair<const key_type, mapped_type>') for 1st argument
insert(const value_type& __v) {return __tree_.__insert_unique(__v);}
^
/usr/include/c++/v1/map:1050:14: note: candidate function template not viable: requires 2 arguments, but 1 was provided
void insert(_InputIterator __f, _InputIterator __l)
^
/usr/include/c++/v1/map:1045:9: note: candidate function not viable: requires 2 arguments, but 1 was provided
insert(const_iterator __p, const value_type& __v)
这些方面有什么解决办法吗?
【问题讨论】:
-
我认为
fbm.insert( fbd );这一行实际上应该是:fbm.insert( static_cast<FooBarPair>(fbd) );
标签: c++ dictionary c++03