`

【转载】C++ 模板类中的类型判断和针对不同类型定义不同的方法

阅读更多

转载自:http://blog.csdn.net/mykoma521/archive/2010/06/14/5670988.aspx

在C++中,使用template,有时候可能会需要得到当前所使用的类型.
本文中使用两种办法来。
TT类为使用模板的类,
TT.h
#ifndef _TT_H
#define _TT_H
#include "stdio.h"
template <class T>
class TT{
public:
    void printType();
    void printType(T);
};
方法1: 实现对不同类型定义不同的方法
template<>
void TT<int>::printType(){
    printf("int\n");
}
template<>
void TT<char>::printType(){
    printf("char\n");
}
template<class T>
void TT<T>::printType(){
    printf("other type\n");
}
方法1结束。
方法2:
template<class T>
void TT<T>::printType(T t){ //判断t是不是int类型的
    printf("%d\n",typeid(t).name() == typeid(1).name()); // 得到t的类型名称
}
方法2结束。
#endif
main.c
#include "TT.h"
int main(){
    TT<int> t1;
    TT<char> t2;
    TT<double> t3;
    t1.printType();
    t2.printType();
    t3.printType();
    int a = 1;
    char b = 'b';
    double c = 1.1;
    t1.printType(a);
    t2.printType(b);
    t3.printType(c);
    return 0;
}
最后的结果为:
int
char
other type
1
0
0

 

---------------EOF----------------

分享到:
评论

相关推荐

    c++类模板学习指南

    - 模板类可以在声明和定义时使用模板参数来代替特定的数据类型。 2. 链表模板类的结构: - 定义了一个链表节点类模板 `Node&lt;T&gt;`,其中 `T` 表示节点中存储的数据类型。 - 节点包含数据成员 `T data;` 和指向下一...

    用c++的类模板实现通用堆栈结构

    为了使用上述定义的模板类`Stack`,我们需要指定类型参数`T`和常量参数`n`的具体值。例如,若希望创建一个可以存放最多100个整数的栈,可以这样声明: ```cpp Stack, 100&gt; myStack; ``` #### 总结 通过上述示例...

    C++模板类二叉查找树的实现

    在`TreeH.h`中,我们可能会看到一个名为`BinarySearchTree`的模板类,它的模板参数可以是任何可以比较大小的类型,如整型、浮点型或者自定义类型。模板类通常用于提高代码的可复用性,使得数据结构可以处理多种数据...

    c++模板元编程代码

    C++模板元编程是一种在编译时执行计算和创建代码的技术,它利用了C++模板系统的能力,将编程任务从运行时转移到了编译时。模板元编程允许开发者编写更高效、更灵活的代码,特别是在处理类型系统和泛型算法时。在本...

    C++模板元编程技术与应用 荣耀

    C++模板元编程是一种在编译时进行计算和代码生成的技术,它利用C++模板机制的强大功能,将元数据转化为可执行的代码。这一技术在提高程序效率、减少运行时开销、实现类型安全和静态多态等方面具有显著优势。在“C++...

    深入学习与实践C++模板编程 值得学习

    C++模板是C++语言中的一个强大特性,它允许程序员创建泛型代码,即能够处理多种数据类型的代码。模板在C++中分为两种主要类型:函数模板和类模板。本篇将深入探讨这两种模板的使用及其重要性。 一、函数模板 函数...

    C++利用链表模板类实现简易队列

    在C++中,模板类的声明和定义不能分开,必须在同一个文件中完成。否则,编译器将无法找到模板类的定义。 知识点四:节点结构体 节点结构体是链表模板类的基本组成部分,节点结构体中包含数据和指针域两部分。数据...

    C++判断题题库

    - **解释**: “类模板可以生成若干个模板类, 每个模板类又可定义若干个对象”这一说法是正确的。 #### 38. 输出操作符的应用 - **知识点**: 提取符`可以用于输出各种类型的变量。 - **解释**: “使用提取符()可以...

    C++数据结构等价类实现

    在C++中实现等价类,我们通常会使用模板类或继承来创建能够表示这些关系的结构。 首先,我们需要理解C语言中的基本数据结构。C语言提供了几种基础的数据结构,如数组、链表、栈、队列、树和图等。这些结构可以帮助...

    C++标准模板库STL和泛型编程简介

    模板允许开发者编写能够接受不同类型参数的函数或类,这样就可以创建出能够在不同数据类型上工作的通用算法和数据结构。 ##### 4.2 概念和模型 在泛型编程中,“概念”是用来描述类型行为的术语。STL中的概念定义了...

    单向链表类模板(全)C++

    模板类使得链表可以用来存储各种类型的数据,不仅限于整型或字符型。`LinkList`类通常会包含以下功能: - 构造函数:初始化空链表。 - 析构函数:销毁链表及其节点。 - 插入操作:在链表的特定位置插入新节点。 ...

    c++模板元编程.ex.zip

    C++模板元编程是C++语言中的一种高级技术,它允许在编译时进行计算和代码生成。模板元编程(Template Metaprogramming,简称TMP)利用C++模板的特性来实现一种形式化的编程,其本质是利用了C++编译器的推导和实例化...

    练习题(含答案)_c++oj答案_c++类oj习题_

    10. **模板类**:模板类是一种泛型编程工具,可以创建适用于多种类型的类或函数。 11. **异常处理**:C++的异常处理机制允许程序在遇到错误时抛出异常,并在合适的地方捕获和处理。 通过解决在线判断题(OJ),你...

    C++ Templates Complete Guide 2nd

    5. **模板重载**:模板重载是C++模板机制中的一个重要方面,允许根据不同的参数类型选择不同的函数或类模板。书中会详细讨论如何设计和解决模板重载冲突。 6. **C++17新特性**:本书涵盖了C++17的新特性,如折叠...

    C++的各种类型题库

    通过类定义数据成员(属性)和成员函数(方法),可以创建具有封装、继承和多态性的对象。构造函数和析构函数用于对象的初始化和销毁,友元函数和静态成员则扩展了类的功能。 模板是C++的泛型编程工具,可以创建...

    (C++模板) 数据结构

    ### C++模板在数据结构中的应用 #### 一、顺序表 **定义:** 顺序表是一种线性表,其中的数据元素在存储空间中是按逻辑顺序依次存放的。本实现中,顺序表采用动态数组来存储数据,并通过模板类的方式进行封装。 *...

    [Tm] 001 C++ 模板.pdf

    文档中提及的代码片段,如最大公约数的模板实现、快速幂算法、扩展欧几里得算法、基本预处理和线性筛素数等,都是C++模板编程中具体的实现方法和技术细节。通过这些模板的实例化,可以生成适用于不同数据类型和需求...

    易语言简单创建c++类文本

    易语言中的类与C++的类概念类似,可以用来封装数据和方法。在创建C++类文本时,我们需要用到易语言的字符串操作命令,如“创建字符串”、“连接字符串”等,用于构建C++类的定义和实现部分。例如,我们可以先定义一...

    在C++泛型编程中如何只特化类的某个成员函数

    在C++泛型编程中,有时我们希望对模板类中的某个特定成员函数进行特化,而不是整个类。这是因为模板类的大部分代码可能都是通用的,只有极个别函数需要根据特定类型或条件有所不同。这种情况下,如果完全特化整个类...

    c++中文手册

    继承允许子类从父类继承属性和方法,多态则允许不同类型的对象对同一消息作出不同的响应。封装是将数据和操作数据的方法结合在一起,保护数据不被外部直接访问。 四、模板 C++模板是泛型编程的核心,它可以创建函数...

Global site tag (gtag.js) - Google Analytics