我想创建交换函数,该函数可以将两种不同类型的变量作为参数。 例如)
int a = 2;
double b = 1.1
swap(a,b)//wish a = 1.1, b = 2
template<typename T, typename U>
void swap(T& x, U& y)//it doesn't work due to automatic type cast
{
U temp = x;
x = y;
y = temp;
std::cout << "swap" << std::endl;
}
答案 0 :(得分:2)
您不能。由于a
的类型为int
,因此它不能保存1.1
之类的值。与javascript等动态类型语言不同,在C ++等静态类型语言中,变量的类型无法更改。
答案 1 :(得分:0)
您不能这样做,因为不能更改对象类型。将把double截断为一个int,将整数保存为double。但是,您可以按以下方式使用std::variant
s
#include <variant>
#include <iostream>
void swapDoubleVariantByIntOne(std::variant<int, double>& intVar, std::variant<int, double>& doubleVar)
{
auto temp = std::get<double>(doubleVar);
doubleVar = std::get<int>(intVar);
intVar = temp;
std::cout << "swap" << std::endl;
}
int main(){
std::variant<int, double> a = 2;
std::variant<int, double> b = 1.1;
swapDoubleVariantByIntOne(a, b);
std::cout << "a: " << std::get<double>(a)<< " b: " << std::get<int>(b) ;
}