c++中template<class T>模板类的语法是怎样的

我在类中定义了T data和T func( ) ,请问在头文件、实现文件、main中分别要怎么用template关键字
谢谢这么快就回答我了
但这个类的cpp文件里 还要不要用template或是要具体指定类型了??

楼上正好说反了, 模板的特性是静态多态, 是编译时期的多态, 比如:

template <class T>
void fun(){}

fun(1);
fun(2.3);

编译器就只会给你生成个void fun<int>()和void fun<double>(), 这种检查是在编译时期进行的.

比如用这一特性来搞个compile time check, 也叫static check, 比如morden C++ design上的:

template <bool>
struct static_assert;

template <>
struct static_assert<true>{};

就可以实现编译期间的assert;

static_assert<1 > 2>();
static_assert<2 < 3>();

摸板现在不支持实现和原型分开, 所以你只能把他们放在同一个文件中, 比如:

template <class T>
void fun();

template <class T>
void fun(){...}

或者直接

template <class T>
void fun(){...}

我直接给你做个示范算了, 比如写个求平方的模板:

// fun.cpp

template <class T>
T square(T x)
{
return x * x;
}

// main.cpp
#include <iostream>

template <class T>
T square(T);

int main()
{
std::cout << square(2);
}

或者

// fun.h

template <class T>
T square(T x){return x*x;}

// main.cpp
#include <iostream>
#include "fun.h"

int main()
{
std::cout << square(2);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-05-19
     template<class T>是模版类的定义,其中T为动态运行时的类型,也就是在编译时不知道是什么类型,只有在程序运行时才会知道..

template<class T>
class Data { //类名
     //....
};

你只要把data与func()放在类中就可以了...
第2个回答  2019-05-28
楼上正好说反了,模板的特性是静态多态,是编译时期的多态,比如:
template<classT>
voidfun(){}
fun(1);
fun(2.3);
编译器就只会给你生成个voidfun<int>()和voidfun<double>(),这种检查是在编译时期进行的.
比如用这一特性来搞个compiletimecheck,也叫staticcheck,比如mordenC++design上的:
template<bool>
structstatic_assert;
template<>
structstatic_assert<true>{};
就可以实现编译期间的assert;
static_assert<1>2>();
static_assert<2<3>();
摸板现在不支持实现和原型分开,所以你只能把他们放在同一个文件中,比如:
template<classT>
voidfun();
template<classT>
voidfun(){...}
或者直接
template<classT>
voidfun(){...}
我直接给你做个示范算了,比如写个求平方的模板:
//fun.cpp
template<classT>
Tsquare(Tx)
{
returnx*x;
}
//main.cpp
#include<iostream>
template<classT>
Tsquare(T);
intmain()
{
std::cout<<square(2);
}
或者
//fun.h
template<classT>
Tsquare(Tx){returnx*x;}
//main.cpp
#include<iostream>
#include"fun.h"
intmain()
{
std::cout<<square(2);
}
相似回答