// 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!