C ++如何在类型不同的两个变量之间建立交换函数

时间:2020-08-28 04:37:36

标签: c++ templates casting

我想创建交换函数,该函数可以将两种不同类型的变量作为参数。 例如)

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;
    }

2 个答案:

答案 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) ;

}

Demo

相关问题