Как в данном случае прям из функции присвоить значения переменным?
#include <iostream>
template<typename T>
T swap(T& a, T& b) {
T* t = new T;
*t = a;
a = b;
b = *t;
delete t;
return a, b;
}
int main() {
int q = 1;
int w = 3;
double e = 2.3;
double t = 4.3;
swap<int>(q, w);
swap<double>(e, t);
std::cout << q << " " << w << std::endl;
std::cout << e << " " << t << std::endl;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Все работает (проверено именно в VC++), но не проще было бы просто написать
void swap(auto& a, auto& b) {
auto t = a;
a = b;
b = t;
}
заодно не выделяя память динамически?
И - зачем вам это return a, b;? Кстати, надеюсь, вы в курсе, что при этом возвращается одно значение - b?
P.S. По обсуждении с HolyBlackCat родился более строгий вариант, не допускающий переменные разных типов:
void swap(auto& a, auto& b)
{
static_assert(is_same_v<remove_cvref_t<decltype(a)>,
remove_cvref_t<decltype(b)>>,
"Different types");
auto t = a;
a = b;
b = t;
}