小编Ale*_*789的帖子

在右值和左值引用中创建函数时,有没有办法避免重复的代码?

有时,当我创建一个函数时,它需要一个右值引用版本,例如:

template<typename T> void printCont(T &Cont){
    for (auto &i : Cont)
        cout << i << ' ';
    cout << endl;
}
Run Code Online (Sandbox Code Playgroud)

所以我可以打印任何容器,std::vector但是我需要管理一些rvalue才能直接打印

template<typename T> void printCont(T &&Cont){
    for (auto &i : Cont)
        cout << i << ' ';
    cout << endl;
}
Run Code Online (Sandbox Code Playgroud)

所以我可以printCont(myclass.getVector())举个例子。(在此示例中,很容易将要在此版本中打印的内容复制到左值向量,但是在实际程序中,这样做会使我们的程序变慢)

但是正如您所看到的,两个功能都具有相同的代码。我知道吗,重复代码是良好做法的错误。所以我的问题是关于...是否可以从右值版本或viseversa调用函数的左值版本?有办法避免这种重复的代码吗?想象一下,我创建了两个2000lines函数,并且我需要创建它的两个版本,只做“ Control + C”和“ Control + V”会浪费很多行。

c++ templates

3
推荐指数
1
解决办法
54
查看次数

标签 统计

c++ ×1

templates ×1