gpt4 book ai didi

c++ - 打印不同类型成员的函数

转载 作者:行者123 更新时间:2023-11-28 05:09:10 24 4
gpt4 key购买 nike

我想写一个接受多种不同类型的函数,比如 double 和复数。我还想打印他们的成员,比如当类型为 double 时打印 double 值,当这种类型为复数时打印实部和虚部。

如果我使用模板,就会出现错误,因为 double 根本不能有实部和虚部。

template<class T>
void univ_print(T t)
{
if(typeid(T)==typeid(double))
printf("%f\n",t);

else if(typeid(T)==typeid(complex))
printf("%f\t%f\n",t.real, t.imag);


}

这行不通。那么怎样才能得到我想要的效果。

谢谢!

最佳答案

模板在类型共享接口(interface)的情况下更有用

template<typename T>
T sum(T a, T b)
{
return a + b;
}

在这里,我们正在创建 sum使用接口(interface)接受所有类型的函数 operator+ ,其中包括基元。

现在,如果几种类型不共享一个接口(interface),您需要做的就是为它们特化/重载。碰巧,重载函数模板是 often superior特化。

向自定义类型添加输出函数的(几乎标准的)方法是重载 operator<<用于流。

class Complex
{
double real, imag;
friend std::ostream& operator<<(std::ostream& os, const Complex& c)
{
return os << c.real << '\t' << c.imag;
}
// public methods...
};

然后你就可以写了

Complex c;
std::cout << c << std::endl;

关于c++ - 打印不同类型成员的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43860557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com