- 非类型模版
- 类型模版
-
- 类模版
- 函数模版
一。非类型模版
#include <iostream>
using namespace std;
template<int Size>
class Index
{
public:
int operator[](char vchar)
{ return vchar % Size; }
};
int main()
{
Index<26> index;
cout << index['a'] << endl;
}
二。类模版
类模版——模版形参为基本类型
#include <iostream>
using namespace std;
template<class Type>
class trie
{
public:
trie(Type val_1, Type val_2) : num_1(val_1), num_2(val_2) {}
void print_sum() { cout << num_1 + num_2 << endl; }
private:
Type num_1, num_2;
};
int main()
{
trie<int> tt(2, 5);
tt.print_sum();
}
类模版——模版形参为自定义非模版类
#include <iostream>
using namespace std;
template<class Type>
class trie
{
public:
Type num;
};
class Index
{
public:
int operator[](char vchar)
{ return vchar % 26; }
};
int main()
{
trie<Index> tt;
cout << tt.num['a'] << endl;
cout << tt.num['z'] << endl;
}
类模版——模版形参为自定义模版类
#include <iostream>
using namespace std;
template<class Type, int Size>
class trie
{
public:
Type num;
};
template<int Size>
class Index
{
public:
int operator[](char vchar)
{ return vchar % Size; }
};
int main()
{
trie<Index<26>, 26> t;
}
类模版成员函数定义
成员函数为非模版函数
#include <iostream>
#include <cstring>
using namespace std;
template <class Type, int Size>
class test
{
public:
test(Type num) : val(num) {}
void print_val();
private:
Type val;
};
template<class Type, int Size>
void test<Type, Size>::print_val()
{
cout << val << " " << Size << endl;
}
int main()
{
test<int, 10> a(4);
a.print_val();
}
成员函数为模版函数
#include <iostream>
#include <cstring>
using namespace std;
template <class Type, int Size>
class test
{
public:
test(Type num) : val(num) {}
template<class Type_fuc>
void print_val(Type_fuc m);
private:
Type val;
};
template<class Type, int Size>
template<class Type_fuc> //模版类的模版函数需要另起一行
void test<Type, Size>::print_val(Type_fuc m)
{
cout << val << " " << Size << endl;
cout << "m:" << m << endl;
}
int main()
{
test<int, 10> a(4);
a.print_val("hello");
}
三。函数模版
#include <iostream>
using namespace std;
template<class Type>
Type sum(Type num_1, Type num_2)
{
return num_1 + num_2;
}
int main()
{
cout << sum(2, 3) << endl;
cout << sum(2.2, 3.0) << endl;
}
结果
5
5.2