Иногда, когда я создаю функцию, ей нужна справочная версия rvalue, например:
template<typename T> void printCont(T &Cont){
for (auto &i : Cont)
cout << i << ' ';
cout << endl;
}
Таким образом, я могу напечатать любой контейнер, например std::vector
, но мне нужно управлять некоторыми значениями, которые будут напечатаны напрямую
template<typename T> void printCont(T &&Cont){
for (auto &i : Cont)
cout << i << ' ';
cout << endl;
}
Так что я могу назвать это как printCont(myclass.getVector())
в качестве примера.
(в этом примере было бы просто скопировать содержимое для печати в этой версии в вектор lvalue, но в реальных программах это сделало бы нашу программу более медленной)
Но, как вы можете видеть, ОБА ФУНКЦИИ ИМЕЮТ ТО ЖЕ КОД. Знаю ли я, дублированный код является ошибкой в хороших практиках. Так что мой вопрос о ... есть ли способ вызвать версию функции lvalue из версии rvalue или viseversa? Есть ли способ избежать этого дублированного кода? Представьте, что я создаю две функции 2000 линий, и мне нужно создать обе версии, это будет пустой тратой строк, просто сделайте «Control + C» и «Control + V».