Выберите объявление функции с параметром lvalue или rvalue

Есть ли способ удалить «отвесную» версию всех моих функций без необходимости менять строку «попадания» на «фиксированную»?

Да, моя программа работает нормально, но я думаю, есть ли способ использовать эту версию всех моих функций.

Имейте в виду, что int не совсем int в моих программах, но псевдоним типа, который может быть объектом (например, container_reference<std::array<double,4>> ) или ссылка (например, std::array<double,4> & )

void func(int &&m) { cout << "rvalue: " << m << endl; }
void func(int  &m) { cout << "lvalue: "; func(std::move(m)); } // PLUMB!

int main()
{
int a = 5;
func(a);    // HIT!
func(std::move(a)); // FIXED!
func(6);
func(a + 5);
}

0

Решение

У меня возникли проблемы с пониманием, что именно вы хотите, но это может быть вариант:

template<typename T>
void func(T &&m) {
// ...
}

T&& был назван «универсальной ссылкой», поскольку он будет связываться как с lvalue, так и с rvalues ​​из-за правил свертывания ссылок.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]