【发布时间】:2017-05-09 03:27:46
【问题描述】:
我想写一个函数来接受许多不同的类型,比如双重和复杂。我还想打印他们的成员,比如当类型为 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);
}
这不起作用。那么怎样才能得到我想要的效果呢。
谢谢!
【问题讨论】:
-
您可以为不同的类型重载
univ_print(),而不是使用模板。 (例如,有univ_float(double)和univ_float(complex)。)只有当你有一堆类型可以被相同或大部分相同的类型时,模板才真正起作用,不同之处专门使用特征和/或特定的重载。您实际上想在这里实现什么目标? -
@cdhowie:好主意,谢谢!这就是我想要的。
-
您到底为什么要使用
printf,而basic_ostream::operator<<已经为您想要显示的大多数类型定义了。任何额外的要求都可以通过专门的univ_print来处理。 -
您可以使用重载或模板特化