[問題] template class 裡 member function 的遞迴呼叫
開發平台(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
--
→
01/07 13:53,
01/07 13:53
→
01/07 13:54,
01/07 13:54
推
01/07 13:58,
01/07 13:58
推
01/07 14:00,
01/07 14:00
推
01/07 14:00,
01/07 14:00
→
01/07 14:09,
01/07 14:09
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.248.40
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1483103797.A.4E8.html
推
12/30 21:52, , 1F
12/30 21:52, 1F
我原本認為程序是這樣的
跑到136 呼叫84 // 因為R=int 執行107-125
跑到114 呼叫84 // 因為R=complex<double> 執行86-105
算好105的result 傳回給上一層的114
算好125的result 傳回給上一層的136
所以我不懂為什麼compiler傳回錯誤是在第105行啊=口=
→
12/30 21:55, , 2F
12/30 21:55, 2F
→
12/30 21:55, , 3F
12/30 21:55, 3F
→
12/30 21:55, , 4F
12/30 21:55, 4F
→
12/30 21:56, , 5F
12/30 21:56, 5F
→
12/30 21:56, , 6F
12/30 21:56, 6F
※ 編輯: xavier13540 (140.112.248.40), 12/30/2016 22:10:24
推
12/30 22:33, , 7F
12/30 22:33, 7F
→
12/30 22:33, , 8F
12/30 22:33, 8F
這樣如果沒有下面的slow_multiplication()那幾行
我就允許(*this)不是複係數多項式 但可以跟另一個複係數多項式相乘欸@@
※ 編輯: xavier13540 (140.112.248.40), 12/30/2016 22:47:56
推
12/30 23:40, , 9F
12/30 23:40, 9F
→
12/30 23:41, , 10F
12/30 23:41, 10F
→
12/30 23:41, , 11F
12/30 23:41, 11F
→
12/30 23:42, , 12F
12/30 23:42, 12F
推
12/30 23:47, , 13F
12/30 23:47, 13F
推
12/31 00:06, , 14F
12/31 00:06, 14F
→
12/31 00:07, , 15F
12/31 00:07, 15F
→
12/31 00:09, , 16F
12/31 00:09, 16F
→
12/31 00:09, , 17F
12/31 00:09, 17F
→
12/31 00:10, , 18F
12/31 00:10, 18F
→
12/31 00:10, , 19F
12/31 00:10, 19F
好的 我找個時間來研究看enable_if
以前不知道有這種東西@@
推
12/31 16:54, , 20F
12/31 16:54, 20F
實際上我只有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