繁体   English   中英

打印不同类型成员的函数

[英]A function that prints different types' members

我想写一个接受许多不同类型的函数,比如说双重和复杂。 我也想打印他们的成员,比如说当类型为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);


}

这行不通。 那么如何获得想要的效果。

谢谢!

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

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

在这里,我们正在创建sum函数,该函数可以使用带有基本类型的接口operator+接受所有类型。

现在,如果几种类型不共享一个接口,您需要做的是为其专门化/超载。 碰巧的是,重载功能模板通常优于专门化。

将输出函数添加到自定义类型的(几乎标准)方法是使stream的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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM