问题描述
我有这样的代码
template <typename T> void fun (T value)
{
.....
value.print (); //Here if T is a class I want to call print (),
//otherwise use printf
.....
}
现在,为了打印值,如果T是一个类,我想调用对象的打印函数,但如果T是基本数据类型,我只是想使用printf。
Now, to print the value, if T is a class, I want to call the print function of the object, but if T is a basic datatype, I just want to use printf.
那么,如何找到模板类型是基本数据类型还是类?
So, how do I find if the Template type is a basic data type or a class?
推荐答案
您可以使用(可能还有 std :: is_union
)。详细信息取决于您对基本类型的定义。有关类型支持的详情,请。
You could use std::is_class
(and possibly std::is_union
). The details depend on your definition of "basic type". See more on type support here.
但请注意,在C ++中,通常会重载 std :: ostream&用于打印用户定义的类型
T
的操作符<<(std :: ostream& T;这样,你不需要担心传递给你的函数模板的类型是否是一个类:
But note that in C++ one usually overloads std::ostream& operator<<(std::ostream&, T)
for printing user defined types T
. This way, you do not need to worry about whether the type passed to your function template is a class or not:
template <typename T> void fun (T value)
{
std::cout << value << "\n";
}
这篇关于如何确定模板类型是基本类型还是类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!