1. Generic(通用的) programming
Generic programming: writing reusable, unique code with no duplication! One way is to allow data types to be parameterized(C++ entitied that work on any datatypes).
2. Template functions
Normal functions are created during compile time, and used in runtime. Template functions are not compiled until used by the code.
The compiler deduces(推断) the parameter types and generates a unique function specifically for each time the template function is called. After compilation, the compiled code looks as if you had written each instantiated(实例化) version of the function yourself.
Syntax
1 | template <typename T> |
Where template
declare that the next function declaration is a template. typename
specifies that ‘T’ is some generic type(such as int, char…). Scope of template arguments(T
) is limited to just this one function.
Template type deduction
If the template function parameters are regular, pass-by-value parameters:
- Ignore the ‘&’
- After Ignore the ‘&’, igonre ‘const’ too.
If the template function parameters are references or pointers, this is how type are deduced:
- Ignore the ‘&’
- Match the type of parameters to inputted arguments
- Add on const after
3. Template Metaprogramming(TMP)
Template Metaprogramming: Writing code that runs during compilation(insted of run time).
What is TMP
Normal code runs during run time, while TMP runs code during compile time. TMP can make compiled code packages smaller and speed up code when it’s actually running.
1 | template<unsigned n> |
How can TMP actually be used?
TMP was actually discovered(not invented,discovered) recently! TMP can be applied in many situations:
- Ensuring dimensional unit correctness.
- Optimizing matrix poerations.
- Generating custom design pattern implementation.
- policy-based design: templates generating their own templates.
Why write generic functions?
An example:
1 | template<typename InputIter, typename DataType> |
By using generic functions, we can solve each of these problems with the function above!
- count the times
3
appears in astd::vector<int>
- count the times
Y
appears in astd::istream
- count the times
5
appears in the second half of astd::deque<int>
- count the times
x
appear in the second half of astd::string
- 本文作者: 夏花
- 本文链接: http://xiahua19.github.io/2022/07/25/cs106l-8-Template-Functions/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!