如何确定模板类型是基本类型还是类

如何确定模板类型是基本类型还是类

本文介绍了如何确定模板类型是基本类型还是类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样的代码

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

这篇关于如何确定模板类型是基本类型还是类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-14 05:57