123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #include<type_traits>
- #include<string>
- //类模板
- //一个最基本的类模板
- template<typename T1>
- class stack
- {
- };
- //类模板的特化,即设定当模板参数为某些类型的时候的操作
- //其中的每一个函数都将不是模板函数,即非泛型函数
- template<>
- class stack<int>
- {
- };
- template <typename T> //别名模板
- using void_t = void;
- //偏特化
- template<typename T1, typename T2 = void> //带默认参数的主模板
- struct check :public std::false_type {};
- template<typename T1> //注意这是原函数模板的偏特化,所以允许出现另一个参数
- struct check<T1, void_t<decltype(std::declval<T1>() / std::declval<T1>())>> :public std::true_type
- {
- };
- //类的模板推导
- //C++中要求能模板推导的类的默认构造函数是可用的
- //这样将能够使用类的类型推导
- template<typename T>
- class stack
- {
- stack() = default;
- stack(T) {}
- };
- //但是推导会出现新的问题
- template<typename T>
- class stack
- {
- stack(const char*)->stack<std::string>; //推导指引,当出现const char* 的时候推导为std::string
- };
|