是否有一种方法可以避免在RVALUE和LVALUE参考中创建功能时避免重复的代码
Is there a way to avoid duplicated code while creating a function in rvalue and lvalue references?
有时我创建一个函数时,它需要一个rvalue参考版本,例如:
template<typename T> void printCont(T &Cont){
for (auto &i : Cont)
cout << i << ' ';
cout << endl;
}
因此,我可以打印任何像std::vector
这样的容器,但是我需要管理一些直接打印的RVALUE
template<typename T> void printCont(T &&Cont){
for (auto &i : Cont)
cout << i << ' ';
cout << endl;
}
因此,我可以将其称为printCont(myclass.getVector())
。(在此示例中,很容易将内容复制在此版本中,将其放到lvalue vector中,但是在现实世界程序中,这样做会使我们的程序变慢(
,但是如您所见,两个函数都具有相同的代码。我知道,重复的代码在良好实践中是一个错误。所以我的问题是关于...有没有办法从rvalue版本或viseversa调用函数的lvalue版本?有没有办法避免这种重复的代码?想象一下,我创建了两个2000Lines功能,我需要创建两个版本,这将是浪费行,只是"控制 c"answers" control v"。
用于第二个功能:
template<typename T> void printCont(T &&Cont)
它实际上是一个转发参考,这意味着可以使用lvalue和rvalue参数调用。如果用LVALUE调用,则T
推迟到LVALUE参考类型。您可以从代码中删除第一个版本。
另一个选项,因为您的代码未修改操作数,是使用:
template<typename T> void printCont(T const& Cont)
也将同时接受lvalues和rvalues。
(在此示例中
这没有任何意义,看来您对lvalues和rvalues有一些误解。
相关文章:
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- C++ - 为文本RPG创建基本战斗功能
- 我在 C++ 中创建了一个函数来递归反转字符串,但是之后如何使功能打印一个 endl?
- 如果在创建对象时创建了 VPTR,那么为什么具有虚拟功能的类的大小在 32 位系统上为 4,在 64 位机器上为 8
- 创建类成员功能
- 插入功能保持重新创建根节点
- 如何在 python 交易模型中创建功能时间条件
- 如何为带有计时功能的程序创建计时器?
- Protobuf的反序列化功能之一可以使用Cereal重新创建吗?
- 如何使用Sfinae为容器创建模板功能,并根据操作员推断返回类型
- 类自动创建基于成员名称的功能
- 在功能中创建一个数组,然后将其返回到main()
- 从没有预处理器的HANA元组中创建功能签名
- OpenCV Houghline功能创建无限线
- C++的新增功能:创建 2D 数组并具有正确的赋值运算符:分割错误
- 从成员类功能创建线程
- 用于存储由第一个功能创建的指针的设计模式将在以后使用
- 使用netUserAdd功能创建Windows用户配置文件
- 使用创建文件功能创建文件会导致写保护文件
- c++;使用多种功能创建年度日历并打印到输出文件