如何解决如何区分这两个插入函数
我自己的列表有两个插入功能
template<typename T,typename Allocator>
auto list<T,Allocator>::insert(iterator pos,size_t count,const T & value)->iterator
{
for (size_t i = 0; i < count; i++) {
pos = insert(pos,value);
}
return pos;
}
template<typename T,typename Allocator>
template<typename ...Args>
auto list<T,Args && ...args) -> iterator
{
auto ret_val = this->get_allocator().allocate(1);
this->get_allocator().construct(ret_val,std::forward<Args>(args)...);
auto new_node = new node<T>(ret_val);
auto current_node = pos.l_node;
new_node->n_next = current_node;
new_node->n_prev = current_node->n_prev;
current_node->n_prev->n_next = new_node;
current_node->n_prev = new_node;
return iterator(new_node);
}
有时编译器不知道应该调用哪个函数,比如下面这种情况
list<int> l1;
l1.insert(l1.begin(),10,2);
我期望调用的是第一个函数,但实际上调用的是第二个函数,然后会出现如下错误
The compiler cannot cast from initializer_list to int.
代码在这里:https://paste.ubuntu.com/p/FxHPrdDHsj/
解决方法
调用第二个是因为它是一个更好的匹配。
第一个函数需要三个参数 (iterator,size_t,int)
。
第二个函数需要 N 个参数 (iterator,stuff)
。
您提供的是 (iterator,int,int)
。
匹配第一个函数需要隐式转换(int
-> size_t
)。匹配第二个不需要转换。
将调用更改为 l1.insert(l1.begin(),(size_t) 10,2)
,它应该调用第一个。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。