c++ - 存在引用和值重载时的模棱两可的函数调用
问题描述
我有以下课程:
template<typename T>
class List {
void Add(T& item) {//GOOD STUFF}
void Add(T item) {//More STUFF}
void Remove(T item) {//STUFF}
};
我正在尝试像下面这样使用它
List<MyClass> list;
MyClass obj;
list.Add(obj); //Here the compiler gets angry :((
关于这个问题,我已经找到了以下三个 SO 问题,但我仍然无法调用任何一种方法。
带有重载 r 值引用函数的不明确调用
带有指针、引用和常量引用参数的函数调用
不明确 不明确的引用/值函数
解决方案
您打算调用哪个函数是不明确的,因为作为参数传递给函数的任何左值都可以隐式转换为引用,因此歧义是不可避免的,如基于值与常量引用的函数重载中所述。
你可以改变这个:
void Add(T item) {}
对此:
void Add(T&& item) {}
推荐阅读
- java - Bean 和 SQL 异常
- vb.net - 使用编辑按钮禁用所有文本框字段解锁的快速方法
- java - Java 2d 数组矩阵程序(素数之和)
- flutter - 已指定命名参数“body”的参数。当我们在颤振的脚手架中有两个“body”时我们应该做什么
- ios - 应用程序从挂起状态转换到后台状态后,Timer 对象是否继续触发?
- python - Django 模板 - 渲染具有特定属性的对象
- gcc - 如何在模块文件中设置 USIF 特定变量“GLIBC”?
- rest - 集成 Zoho REST API
- python - 如何确定我的操作系统上是否有 GPU 可用?
- selenium - 我们可以使用 webDriver 采样器了解 JMeter 中每个页面的浏览器渲染时间吗?