- 一、模板函数实例化
- 二、默认类型与非类型参数
一、模板函数实例化
#include#include using namespace std::string_literals; //函数模板定义 template T max(T x, T y) { return (x > y ? x : y); } //显式实例化:证书 template int max(int, int); int main() { //调用显式实例化的函数 std::cout << "max(1,2) : " << max(1, 2) << std::endl; //浮点数实例化 std::cout << "max(2.9,1.0): " << max(2.9, 1.0) << std::endl; //字符实例化 std::cout << "max('A','D'): " << max('A', 'D') << std::endl; //字符串字面量实例化 std::cout << R"(max("ABC","ABD") : )" << max("ABC", "ABD") << std::endl; std::cout << R"(max("124","123") :)" << max("124", "123") << std::endl; //std::string 类型实例化 // std::cout << R"(max("ABC"s,"ABD"s) )" << max("ABC"s,"ABD"s) << std::endl; // std::cout << R"(max("ABD"s,"ABC"s) )" << max("ABD"s, "ABC"s) << std::endl; //名字空间冲突问题 }
结果如上图所示。
二、默认类型与非类型参数#include"Stack.h" #include#include int main() { Stack<> c; std::string s{ "Hello,World!" }; for (auto i : s) { c.push(i); } for (; c.empty() != true;) { std::cout << c.pop(); } }
结果如上图所示。
相关文件
#pragma once templateclass Stack { private: T elements[N]; int size{ 0 }; public: bool empty(); T peek(); T push(T value); T pop(); int getSize(); Stack(); }; template Stack ::Stack() { size = 0; for (auto& i : elements) { i = 0; } } template bool Stack ::empty() { return (size == 0 ? true : false); } template int Stack ::getSize() { return size; } template T Stack ::peek() { return elements[size - 1]; } template T Stack ::pop() { T temp = elements[size - 1]; elements[size - 1] = 0; size--; return temp; } template T Stack ::push(T value) { elements[size] = value; size++; return value; }



