C_and_CPP 板


LINE

开发平台(Platform): Win10 编译器: g++ -std=c++14 问题(Question): 小弟目前在写一个多项式的class template<class R> class polynomial{...}; 定义了operator * 小弟希望能做到 当R = complex<double>时 乘法可以用FFT加速 而当R = int/double时 1. 把乘号两边的多项式embed到polynomial<complex<double>> 2. 用polynomial<complex<double>>的乘法回传结果 手动转回polynomial<R> code如下 看起来很长但是 乘法在第84-129行 可能有问题的部分在第107-125行 其他部分(e.g. FFT)可以不用管@@ http://ideone.com/JbRjhU compiler说 在做两个polynomial<int>的相乘时 没办法从polynomial<complex<double>>转型到polynomial<int> 可是小弟在第114行 明明是用polynomial<complex<double>>去接f*g啊 请问是哪里写烂了rdrrC --
1F:→ iWRZ:传说原本小红帽是R-18故事......01/07 13:53
2F:→ iWRZ:天方夜谭也是很多R-1801/07 13:54
3F:推 ID556:格林童话原也是 R-1801/07 13:58
4F:推 flysonics:Fate/SN也是R-1801/07 14:00
5F:推 belmontc:H-game也都是R-1801/07 14:00
6F:→ minoru04:油厂国小也是R-1801/07 14:09
--



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.248.40
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1483103797.A.4E8.html
7F:推 LPH66: 呃, ideone 指的 result 是 105 行的喔 12/30 21:52
我原本认为程序是这样的 跑到136 呼叫84 // 因为R=int 执行107-125 跑到114 呼叫84 // 因为R=complex<double> 执行86-105 算好105的result 传回给上一层的114 算好125的result 传回给上一层的136 所以我不懂为什麽compiler传回错误是在第105行啊=口=
8F:→ LPH66: 稍微看了一下, 你这里或许需要用 enable_if 间接达成 12/30 21:55
9F:→ LPH66: 依然模版参数型态选择实作这个目的 12/30 21:55
10F:→ LPH66: *依照 12/30 21:55
11F:→ LPH66: 不然因为你两个状况都写了, 即使其中一边不进去还是会报错 12/30 21:56
12F:→ LPH66: 参考 http://stackoverflow.com/a/15598994 的中间做法 12/30 21:56
※ 编辑: xavier13540 (140.112.248.40), 12/30/2016 22:10:24
13F:推 holydc: http://ideone.com/mosfZW 12/30 22:33
14F:→ holydc: 直接 overload,template 版本不要跟 class 共用 R 的话呢 12/30 22:33
这样如果没有下面的slow_multiplication()那几行 我就允许(*this)不是复系数多项式 但可以跟另一个复系数多项式相乘欸@@ ※ 编辑: xavier13540 (140.112.248.40), 12/30/2016 22:47:56
15F:推 LPH66: // 因为R=int 执行107-125 ←问题在这里 12/30 23:40
16F:→ LPH66: 确实是只执行 107-125 没错, 但那个版本里 86-105 也还在 12/30 23:41
17F:→ LPH66: 而 86-105 那一段当代 R=int 进去时是编不过的 12/30 23:41
18F:→ LPH66: 所以我才会建议用 enable_if 拆开 12/30 23:42
19F:推 holydc: 是我想错了,这样子呢 http://ideone.com/Ecs0iN 12/30 23:47
20F:推 LPH66: 使用 enable_if 的做法 http://ideone.com/PH4Sej 12/31 00:06
21F:→ LPH66: <class S> 这一层是必要的, 要让成员有模版才能 SFINAE 掉 12/31 00:07
22F:→ LPH66: 启用点在 operator * 里的呼叫, 使三个成员模版都试过一次 12/31 00:09
23F:→ LPH66: 然後只有其中一个的 enable_if<> 会成立而产生程式 12/31 00:09
24F:→ LPH66: 另外两个被 SFINAE 掉了所以完全不存在於那个版本的类别中 12/31 00:10
25F:→ LPH66: 因此就不会编不过 12/31 00:10
好的 我找个时间来研究看enable_if 以前不知道有这种东西@@
26F:推 johnjohnlin: 不是应该要用特例化吗 12/31 16:54
实际上我只有operator *需要specialization 我这份code已经砍掉了其他不相干的东西(e.g. +, -, etc.)了 原本的class更大 如果要为了|C[x]/|R[x]/Z[x] 重写一堆完全一样的member function们 感觉不太健康 ※ 编辑: xavier13540 (140.112.248.40), 12/31/2016 19:14:55 ※ 编辑: xavier13540 (140.112.248.40), 12/31/2016 19:15:57







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灯, 水草

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

TOP