C_and_CPP 板


LINE

: template<class ...U> : Arr(U ...args):arr(new T[std::tuple_size<decltype(std::make_tuple(args...))>:: : value]{args...}){} : 推 hunandy14: :: 不是用来指定看是哪一个class 或是哪一个namesp 吗 03/31 15:05 : → hunandy14: 为什麽这里可以用来返回一个数值,怎做到的 03/31 15:06 : 推 LPH66: 呃? 你讲的是哪一个 :: ? 03/31 18:08 : 推 hunandy14: std::tuple_size<decltype(std::make_tuple(args...))> 04/01 13:50 : → hunandy14: ::value 04/01 13:50 : → hunandy14: 这个,不好意思没说清楚 04/01 13:50 简单拆解一下这个东西 最外层是 std::tuple_size<(下述)>::value 这是 std::tuple_size<> 这个模版结构的 value 成员 这个模版是设计得使得这个 value 成员是一个静态的编译时期常数 其值为它在 <> 里面的 tuple<> 型态其元素个数 例如说 std::tuple_size<tuple<int,float,double>>::value 的值就是 3 这里在 tuple_size<> 里面的是 decltype(std::make_tuple(args...)) 这一串东西 它会求出「把所有参数做成 tuple 之後的那个 tuple 型态」 於是加上模版参数 U 的推导就可以求出 U 里面有多少个东西了 ==== 至於 std::tuple_size 是怎麽求出来的 它用的是下面 loveflame 回答的另一个方法: : 後来查到一个不用tuple获得size的方式 : template<class ...U> : Arr(U ...args):arr(new T[sizeof...(args)]{args...}){} 在 cppreference 里面表示 tuple_size 是如此实作的: template< class... Types > class tuple_size< std::tuple<Types...> > : public std::integral_constant<std::size_t, sizeof...(Types)> { }; http://en.cppreference.com/w/cpp/utility/tuple/tuple_size std::integral_constant 这个模版就是提供 value 这个成员的指定介面 这模版有两个模版参数, 第一个是型态, 第二个是值 然後它会有这个 value 这个 static constexpr 成员 其型态是第一模版参数, 其值是第二模版参数 (参考实作可看 http://en.cppreference.com/w/cpp/types/integral_constant 下面 Possible implementation 那里) 那在这里可以看到它用的型态是 std::size_t, 值为 sizeof...(Types) 这後一个 sizeof... 运算子就是用来求出模版参数 Types 里有多少个东西 http://en.cppreference.com/w/cpp/language/sizeof... 正是这个东西提供了我们所要的值 -- 'You've sort of made up for it tonight,' said Harry. 'Getting the sword. Finishing the Horcrux. Saving my life.' 'That makes me sound a lot cooler then I was,' Ron mumbled. 'Stuff like that always sounds cooler then it really was,' said Harry. 'I've been trying to tell you that for years.' -- Harry Potter and the Deathly Hollows, P.308 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.177.29.238
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1491034184.A.2A0.html ※ 编辑: LPH66 (180.177.29.238), 04/01/2017 16:10:09
1F:推 Ommm5566: 看到大神先推 04/01 20:25
2F:→ hunandy14: 看了好久还是不能理解QQ 容我一个一个问麽 04/03 22:31
3F:→ hunandy14: std::integral_constant 里面的 04/03 22:33
4F:→ hunandy14: operator value_type() 这是什麽功用算是operator吗 04/03 22:34
5F:→ LPH66: 那是转型用, 是在需要一个这种物件实体时才要的 04/04 02:22
6F:→ LPH66: 跟本文的编译时期常数无关 04/04 02:22
7F:→ LPH66: operator() 也是一样, 是在需要一个 functor 时才要的 04/04 06:35
8F:推 hunandy14: Possible implementation 那里 提到的 size_t 04/04 17:31
9F:→ hunandy14: 连结到网页内怎麽没发现这个~ 04/04 17:32
10F:→ hunandy14: 我也顺便去看了 functor 想请问那两个有什麽差异~ 04/04 17:33
11F:→ hunandy14: operator value_type() || value_type operator()() 04/04 17:34
12F:→ hunandy14: 然後为什麽 op 名称还可以带 value_type 字样~ 04/04 17:35
13F:→ hunandy14: 看到的用法都是直接 operator() 04/04 17:36







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP