[問題] 取得template prototype

看板C_and_CPP作者 (藍影)時間13年前 (2012/03/13 21:46), 編輯推噓6(6016)
留言22則, 8人參與, 最新討論串1/1
有點鑽牛角的問題,不過也是實際遇到的問題。 這裡 template 用途主要是拿來取代 C 裡之 function pointer, 問題整理後之示意 code 如下 typedef int (*ptr1)(int, int); int add1(int a, int b){return a+b;} template<typename T, typename Func> T Execute(Func ptr) { return ptr(1,1); /* 等一下要問這裡 */ } 執行時變 cout << Execute<int, ptr1>(add1) << endl; 今天我要多加一份 adder typedef double (*ptr2)(double, double, double); double add2(double a, double b, double c){return a+b+c;} 而在呼叫時,我希望直接可以仿前面的方式 cout << Execute<double, ptr2>(add2) << endl; 但這樣 Execute 裡就不能寫 return ptr(1,1), 而是要寫 return ptr(1.0, 1.0, 1.0)。 類似這情形況,不知目前是否有什麼方法可處理掉? 目前想到的可能是必須去解 template function 裡之 prototype < 不會解 >, 解出來後若 prototype 複雜,應也是一項大工程 < 一堆 if-else >。 抑或,以這種情形而言,根本就不適合用 template ? 用到幾個 function 就人工逐一展開? 先謝謝各位不吝指導先。 -- 我知道 ~ 但別說出來 , 說出來讓人感到特別難過... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.165.40

03/13 22:34, , 1F
感覺上Execute作的事其實就是boost::bind的部分功能
03/13 22:34, 1F

03/13 22:56, , 2F
可能要用function object,因為自己寫這個很困難
03/13 22:56, 2F

03/13 22:57, , 3F
template如果要自己寫,應該會用到TypeList的觀念
03/13 22:57, 3F

03/13 22:58, , 4F
可以參考一下 C++設計新思維 CH2, 3, 6
03/13 22:58, 4F

03/13 22:59, , 5F
抱歉更正一下,沒CH6,應該是CH5,我記錯了
03/13 22:59, 5F

03/13 23:01, , 6F
痾... 類似這樣搞不知道行不行:http://ideone.com/hFi8p
03/13 23:01, 6F

03/13 23:02, , 7F
那個.. 沒考慮很多~ 單純寫寫而已~
03/13 23:02, 7F

03/13 23:05, , 8F
@shadow: boost 完全沒碰過,不過您提了我會去補起來.
03/13 23:05, 8F

03/13 23:05, , 9F
@iamstudent:我也在想用func.obj.不過用func.obj.的話
03/13 23:05, 9F

03/13 23:07, , 10F
似乎有點像在C中直接傳struct,最後用va_arg去拆(POD).
03/13 23:07, 10F

03/13 23:07, , 11F
@s3748679: 謝謝您的sample code,它也可讓我研究一陣.
03/13 23:07, 11F

03/13 23:21, , 12F
嗯嗯~ 加油~~~ (溜^^"
03/13 23:21, 12F

03/14 00:09, , 13F
std::bind 已經是 C++11 標準元件
03/14 00:09, 13F

03/14 04:50, , 14F

03/14 06:31, , 15F
!! love 大的 code 很感興趣,不過vc下是不是要多裝什?
03/14 06:31, 15F

03/14 09:23, , 16F
love大的那個code怎麼弄的,template能不定個數了!
03/14 09:23, 16F

03/14 09:58, , 17F
compiler開C++0x(C++11)就可以了
03/14 09:58, 17F

03/14 10:36, , 18F
知道有支援這東西後,type list就沒有意義了
03/14 10:36, 18F

03/14 10:37, , 19F
不知道目前市面上有沒有c++11的書
03/14 10:37, 19F

03/14 10:51, , 20F
補充,如果沒辦法開C++11的,可以看看支不支援TR1
03/14 10:51, 20F

03/14 10:51, , 21F
支援的話,這東西在<tr1/functional>
03/14 10:51, 21F

03/14 17:03, , 22F
所以,VC 可能要裝 feture package 了吧 ..
03/14 17:03, 22F
文章代碼(AID): #1FNq-bxL (C_and_CPP)