看板 C_and_CPP 關於我們 聯絡資訊
手癢 meta-prpgramming版本 老實說我不知道那個inline到底最佳化會不會成功 如果會的話應該都會完全被展開來 相當於全部寫成cout形式 如果沒有其實就是遞迴的形式 這是我亂寫的 有錯別打我= = -------------------------------------- #include <iostream> using namespace std; inline void printLine(int i, int j) { cout << i << " * " << j << " = " << i * j << endl; } template <int I, int J> struct Line { inline static void print() { printLine(I, J); Line<I, J+1>::print(); } }; template <int I> struct Line<I, 9> { inline static void print() { printLine(I, 9); } }; template <int N> struct Group { inline static void print() { Line<N, 1>::print(); cout << endl; Group<N + 1>::print(); } }; template <> struct Group<9> { inline static void print() { Line<9, 1>::print(); } }; int main() { Group<1>::print(); return 0; } ============================= 我改寫了一下= = 推廣成可以變成任意N*N的乘法表 新的版本 #include <iostream> using namespace std; inline void printLine(int i, int j) { cout << i << " * " << j << " = " << i * j << endl; } template <int I, int J> struct Line { inline static void print() { Line<I, J-1>::print(); printLine(I, J); } }; template <int I> struct Line<I, 1> { inline static void print() { printLine(I, 1); } }; template <int NUM, int N> struct Group { inline static void print() { Group<NUM, N - 1>::print(); cout << endl; Line<N, NUM>::print(); } }; template <int NUM> struct Group<NUM, 1> { inline static void print() { Line<1, NUM>::print(); } }; template <int NUM> struct Meta99 { inline static void print() { Group<NUM,NUM>::print(); } }; int main() { Meta99<20>::print(); return 0; } -- Now.in 網路廣播平台 http://now.in 哇咧咧 創意投票系統 http://walele.com 易記學 程式設計教學 http://ez2learn.com/ VICTOR's 個人Blog http://blog.ez2learn.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.165.223.152
ledia:感覺這個討論串又要進入離奇的領域了 02/02 15:33
※ 編輯: StubbornLin 來自: 218.165.223.152 (02/02 15:43)
StubbornLin:我比較期待全用STL的版本 XDD 02/02 15:44
StubbornLin:我在想如果有程式課出99乘法表 有人交這樣的版本的話 02/02 15:46
StubbornLin:助教看到的表情會是怎樣 XD 02/02 15:46
james732:助教:看不懂,這個學弟(妹)好強,滿分 02/02 15:47
Yshuan:助教看不懂是零分吧~ 02/02 15:50
StubbornLin:Meta99<100>::print(); 編好久 XDDDD 02/02 15:53
StubbornLin:好像編不出來= =........ 02/02 15:54
x000032001:這..XDDD 02/02 16:13
pharaoh7:這 好高級喔..... 02/02 16:30
lungswu:好強大的C++,有沒有tool可以轉成C的語法?這對工作很有益 02/02 16:39
VictorTom:果然~~小弟我就知道我完全不懂C++....Orz 02/02 16:50
jhchou:當初看effective c++看到meta programming的時候 02/02 17:11
jhchou:心中的感想只有三個字:這啥小 02/02 17:12
littleshan:新版的 effective c++ 有講到 meta programming 嗎? 02/02 18:04
jhchou:3/e有 Item 48: Be aware of template metaprogramming 02/02 18:26
StubbornLin:這東西我覺得炫技成份大重= = 不怎麼實用 02/02 18:35
StubbornLin:太難理解 加上compiler負擔太大 程式也難寫 02/02 18:38
bil193:雖compiler負擔大,但執行的時候變很快 02/03 00:45
StubbornLin:是跑超快沒錯= = 只是我覺得付出其它的部份太大 02/03 00:56
StubbornLin:而且要效能逼成這樣非得用meta-programming解決 02/03 00:57
StubbornLin:的場合也很少 所以我總覺得這樣玩太炫技 XD 02/03 00:57
StubbornLin:要找到能維護這類程式的人應該很難 我自己也只懂皮毛 02/03 00:58
adxis:用compile time去換的 執行都是常數時間 有人試過多大會 02/03 03:59
adxis:爆嗎? 02/03 03:59
sunneo:看compiler設定值 02/05 01:00