模板模板参数
 
- 模板模板参数(Template Template Parameters):就是让模板参数本身成为模板。
- a)类型模板参数 b) 非类型模板参数 c) 模板模板参数。
#include <iostream>
#include <list>
#include <vector>
#include <string>
using namespace std;
namespace _nmsp1
{
	
	
	
	template<typename T, 
			template <typename W> typename Container=std::vector       
				
			>                                                          
	class MyClass                                                      
	{
	public:
		Container<T> myc;
		MyClass()
		{
			for (int i = 0; i < 10; i++)
			{
				myc.push_back(i);
				cout << "call MyClass()" << endl;
			}
		}
		void func();
	};
	template<
			template<typename W,W* pointer> typename Container   
		    >
		class MyClass2
		{
		public:
			
		};
	template<typename T,
		template <typename W> typename  = std::vector                                     
	>                 
	class MyClass3
	{
	public:
		
	};
	template<typename T,
		template <typename W> typename Container
	>
	void MyClass<T, Container>::func()
	{
		cout << "void MyClass<T, Container>::func()" << endl;
	}
}
int main(int argc, char* argv[])
{
	_nmsp1::MyClass<double, list> mylist; 
	return 0;
}
 
共用体模板(联合模板)
 
- 可以把联合理解成一种类类型(不要理解成类)。联合体也支持模板化。
#include <iostream>
#include <list>
#include <vector>
#include <string>
using namespace std;
namespace _nmsp2
{
	template <typename T,typename U>
	union MyUnion
	{
		T carnum;  
		U cartype; 
		U carname[60]; 
	};
}
int main(int argc, char* argv[])
{
	_nmsp2::MyUnion<int, char> myu;
	myu.carnum = 156;
	cout << myu.carnum << endl;
	return 0;
}