<commit_before># **模板与范型编程** #
***




## **41: 了解隐式接口和编译期多态** ##
    (Understand implicit interfaces and compile-time polymorphism.)
    1) 类和模板都支持接口和多态
    2) 对类而言接口是显式的, 以函数签名为中心; 多态则时通过虚函数发生于运行
       期
    3) 对模板参数而言, 接口是隐式的, 奠基于有效表达式; 多态则是通过模板具现
       化和函数重载解析发生于编译期



## **42: 了解typename的双重意义** ##
    (Understand the two meanings of typename.)
    1) 声明template参数时, 前缀关键字class和typename可互换
    2) 请使用关键字typename标识嵌套从属类型名称; 但不得在基类列表或成员初始
       化列表内以它作为基类的修饰符

<commit_msg>add personal-understanding about understanding implicit interfaces and compile-time polymorphism<commit_after># **模板与范型编程** #
***




## **41: 了解隐式接口和编译期多态** ##
    (Understand implicit interfaces and compile-time polymorphism.)
    1) 类和模板都支持接口和多态
    2) 对类而言接口是显式的, 以函数签名为中心; 多态则时通过虚函数发生于运行
       期
    3) 对模板参数而言, 接口是隐式的, 奠基于有效表达式; 多态则是通过模板具现
       化和函数重载解析发生于编译期
> ### **个人理解**
    对类来说接口是显示的, 通过虚函数发生在运行期;
    对模板来说接口是隐式的, 是通过模板具现化在编译期;



## **42: 了解typename的双重意义** ##
    (Understand the two meanings of typename.)
    1) 声明template参数时, 前缀关键字class和typename可互换
    2) 请使用关键字typename标识嵌套从属类型名称; 但不得在基类列表或成员初始
       化列表内以它作为基类的修饰符


{'fraction_non_alphanumeric': 0.1, 'fraction_numerical': 0.01607142857142857, 'mean_word_length': 3.7905982905982905, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 4, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2536507', 'n_tokens_mistral': 673, 'n_tokens_neox': 750, 'n_words': 89}