Есть ли способ удалить «отвесную» версию всех моих функций без необходимости менять строку «попадания» на «фиксированную»?
Да, моя программа работает нормально, но я думаю, есть ли способ использовать эту версию всех моих функций.
Имейте в виду, что 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);
}
У меня возникли проблемы с пониманием, что именно вы хотите, но это может быть вариант:
template<typename T>
void func(T &&m) {
// ...
}
T&&
был назван «универсальной ссылкой», поскольку он будет связываться как с lvalue, так и с rvalues из-за правил свертывания ссылок.
Других решений пока нет …