| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1548 人关注过本帖
标题:可变参数模板的递归继承的困惑
只看楼主 加入收藏
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:10 
题外话:C/C++语言中没有定义“递归”的概念,自然编译器也没有。(即使是常见的“递归函数”也只是人类眼中是“递归”,在编译器眼中它根本不区分是否调用的是同一个函数)

编译器看到 tuple<A,B,C> 就去找 tuple 的定义,找到 class tuple<Head,Tail...> : private tuple<Tail...>,匹配成 class tuple<A,B,C> : private tuple<B,C>
编译器看到 tuple<B,C> 就去找 tuple 的定义,找到 class tuple<Head,Tail...> : private tuple<Tail...>,匹配成 class tuple<B,C> : private tuple<C>
编译器看到 tuple<C> 就去找 tuple 的定义,找到 class tuple<Head,Tail...> : private tuple<Tail...>,匹配成 class tuple<C> : private tuple<>
编译器看到 tuple<> 就去找 tuple 的定义,找到 class tuple<>,匹配成 class tuple<>
没了,就这样结束了。

你看到编译器在不停地匹配同一个类模板,认为在递归;而编译器却不清楚这一点(主要的是不想知道,知道了也没用),它做的事很简答:遇到一个不认识的东西就去找它的适配。

2022-11-07 13:18
lllyyy3
Rank: 2
等 级:论坛游民
威 望:1
帖 子:24
专家分:20
注 册:2022-10-15
收藏
得分:0 
以下是引用rjsp在2022-11-7 13:18:54的发言:

题外话:C/C++语言中没有定义“递归”的概念,自然编译器也没有。(即使是常见的“递归函数”也只是人类眼中是“递归”,在编译器眼中它根本不区分是否调用的是同一个函数)

编译器看到 tuple<A,B,C> 就去找 tuple 的定义,找到 class tuple<Head,Tail...> : private tuple<Tail...>,匹配成 class tuple<A,B,C> : private tuple<B,C>
编译器看到 tuple<B,C> 就去找 tuple 的定义,找到 class tuple<Head,Tail...> : private tuple<Tail...>,匹配成 class tuple<B,C> : private tuple<C>
编译器看到 tuple<C> 就去找 tuple 的定义,找到 class tuple<Head,Tail...> : private tuple<Tail...>,匹配成 class tuple<C> : private tuple<>
编译器看到 tuple<> 就去找 tuple 的定义,找到 class tuple<>,匹配成 class tuple<>
没了,就这样结束了。

你看到编译器在不停地匹配同一个类模板,认为在递归;而编译器却不清楚这一点(主要的是不想知道,知道了也没用),它做的事很简答:遇到一个不认识的东西就去找它的适配。

懂了,原来是编译器自己会按照 tuple 的定义去匹配出来继承关系,之前一直不知道这个所以没有绕过弯来。
谢谢r老师!
2022-11-07 15:41
快速回复:可变参数模板的递归继承的困惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043208 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved