- 模版类是抽象的,必须进行具体类型,而函数模版则不一定
#include<iostream> #include<string> using namespace std; template < typename T>//定义模版不能加分号 class A { public: A(T a) { this->a = a; } T &get() { return a; } private: T a; }; int main() { A<int> a1(10); // 这里必须写上<>里面的内容! cout << a1.get() << endl; A<char> a2('l'); cout << a2.get() << endl; A<string > a3("love"); string temp=a3.get() ; cout << temp << endl; system("pause"); }
- 函数模版不允许自动类型转换,必须严格按照类型匹配----这里的意思是如果模版类要求两个参数的类型一致,则调用函数必须符合这个要求。
- 普通函数则可以进行自动类型的转化。
#include<iostream> using namespace std; template <typename T> void Staff(T a, T b) { cout << "a= " << a << " b = " << b << endl; cout << "我只是一个普通的函数模版、 "; } void Staff(int a, char b) { cout << "a= " << a << " b = " << b << endl; cout << "我只是一个普通的函数 "; } int main() { int x = 101; char y = 'a'; int z = 100; Staff(x, y);//调用的普通函数 Staff(y, x); 调用的普通函数,普通函数可以自动类型转化 Staff(x, x); 调用的函数模版 函数模版不可以自动类型的转化 system("pause"); }