C++模板编程
示例:
首先假设我们要传递以下模板函数:
1 template<typename T> 2 constexpr T Max(T _a, T _b) { 3 return _a > _b ? _a : _b; 4 }
编写接收该函数的函数模板
1 template<typename T,typename Fun> 2 constexpr T Test(T _a, T _b, Fun _fun) { 3 return _fun(_a, _b); 4 } 5 6 int main() 7 { 8 constexpr int s = Test(12, 13, Max<int>); 9 }
这个地方需要注意的是,Max只能作为函数参数进行传递,不能使用模板参数进行传递,因为Max是一个函数而非一个类型
类模板传递:
1 template<typename T> 2 struct MyStruct { 3 4 }; 5 6 template<template<typename T> class _MyClass> 7 constexpr auto Test(_MyClass<int> _s) { 8 return _s; 9 } 10 11 int main() 12 { 13 Test(MyStruct<int>{}); 14 }
类模板是一个类型,可以作为与其他基础类型一样传递方式传递,不过类模板的参数需要加入template<>声明