VS2017 简单的模板例使用例子

// ConsoleApplication6.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <string>
#include <deque>
#include <vector>
#include <array>

template<typename T1>
class CStudent {
public:
	template<typename T>	
	auto getName(T name) ->decltype(name);
};

template<typename T1>
template<typename T>
auto CStudent<T1>::getName(T name) ->decltype(name) {
	//std::cout << __cplusplus << std::endl; //输出199711L
	std::cout << _MSVC_LANG << std::endl; //201402
	return name;
}


template<typename T,typename Container=std::deque<T>>
class Cb {
public:
	//using sizet = typename Container::size_type;
	typedef  typename Container::size_type sizet ;
	//两种类型重定义方式都是可以的
	sizet size1();
	Cb() = default;
	Cb(std::initializer_list<T> t);
private:
	Container cb;
};

//构造函数
template<typename T, typename Container>
Cb<T, Container>::Cb(std::initializer_list<T> t):cb(t) {
	//初始化容器类型	
	for (T v : cb) {
		std::cout << v << std::endl;
	}
}

//typename是必须的
template<typename T, typename Container>
typename Cb<T, Container>::sizet 
Cb<T, Container>::size1() {
	return cb.size();
}


using Cb_Int = Cb<int>;
using Cb_Int2 = Cb<int,std::vector<int>>;
template<typename T> using CbVector = Cb<T, std::vector<T>>;
int main()
{
	CStudent<int> s;
	s.getName(std::string());
	Cb_Int2 b;
	CbVector<std::string> cbs = {"hello","world","welcome"};
	std::cout <<"cbs.size1() is "<< cbs.size1() << std::endl;
    std::cout << "Hello World!\n";
}


//199711
//hello
//world
//welcome
//cbs.size1() is 3
//Hello World!


posted @ 2020-12-11 12:43  iwetuan  阅读(326)  评论(0)    收藏  举报