本文记录了摸模板的心路历程,卖惨自闭随处可见。
模板匹配机制
若干个重要的模板匹配规则。
- 类模板特化
- 模板的偏特化
模板的偏特化是指需要根据模板的某些但不是全部的参数进行特化。
最优化的优于次特化的,即模板参数最精确匹配的具有最高的优先权。
非模板函数具有最高的优先权。如果不存在匹配的非模板函数的话,那么最匹配的和最特化的函数具有高优先权。
is_instance_of<TB, TA>
判断复杂参数表模板
C++ 11 提供了std::is_base_of
(<type_trait
) 来判断一个类是否为另一个类的基类。而对于复杂模板参数的类型而言,想判明是否相同只能通过 C++ 模板特化的参数预测特性。具体代码实现如下:
1 | template <typename Instance, template <typename ...> class T> |
❔ 其中<T<Args ...>, T>
巧妙地通过用 Args
来初始化相同类型,将拥有相同参数表的类型匹配到 std::true_type
上,否则为 std::false_type
。
最后再暴露一个接口用于表达式:
1 | template <typename Instance, template <typename...> class T> |