Re: [問題] template function pointer
看板C_and_CPP (C/C++)作者loveme00835 (最愛朴素妍)時間15年前 (2011/01/19 03:40)推噓3(3推 0噓 6→)留言9則, 2人參與討論串2/2 (看更多)
※ 引述《walm20 (New CygnusX)》之銘言:
: 程式碼如下: (C++ primer 3rd 中文版 侯捷譯 p.587)
: template<typename Type,
: bool (*Comp) (const Type&, const Type &)>
: const Type&
: min (const Type *p, int size, Comp comp) //此行錯誤
: {
: //do compare operation
: }
: 錯誤訊息:
: D:\Test\c++\HelloWorld\main.cpp|25|error: 'Comp' is not a type|
: ||=== Build finished: 1 errors, 0 warnings ===|
: 我照書上打的, 看起來Comp要這樣寫:
: typedef bool (*Comp) (const Type&, const Type &);
: 但是不清楚怎麼放進去template
: 請問要怎麼改才會對?
模板引數給一個函數指標是可行的, 只要這個指標位址在編譯時期
可以找出來, 跟傳整數的原理一樣, 參考下面的例子:
http://codepad.org/KkuqYsZY
如果要像上面那樣使用, Comp是傳進來的一個指標, 他不是型態,
所以在 Comp comp 的地方會報錯是理所當然的, 這就好像你寫:
void function( int Integer, Integer integer );
你也可以看到出來的錯誤訊息都一樣:
'Integer' is not a type
在這邊 typename Comp comp 也解決不了問題, 原因同上. 至於下
面的用法:
template <typename Type>
typedef bool (*Comp) (const Type&, const Type &);
很可惜目前的 C++ 並不包含這樣的語法.
在這邊提出一個替代方案, 改用 trait class另外定義一個函數指
標型態:
template <typename Return, typename Parameter>
struct FunctionPointer
{
typedef Return (*Type)( Parameter, Parameter );
};
就可以進行這樣的應用: http://ppt.cc/kMBg因為這時候需要知道
的只有 Type 的資訊, 所以你本來的函式就可以進而修改成這個樣
子:
http://codepad.org/fvljDhnY
上面的程式碼應該可以達成你的需求, 但是只適用於傳入函式指標
的情況, 另外還有作判斷的物件的型態也由編譯器幫我們找出來的
寫法:
http://codepad.org/MYB7POXf
程式碼縮短了不少, 也可以傳入 Functor 來使用.
--
◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去
████◤ ██ ◢██◣█ ██ ████ ██ s ~> T-ara
█/███ ██ ██ ██ █/█ ◢███ █/█ 歡迎您的光臨
████◤ ██ ██ ██ ██◤ ███◤ ██◤ 恩靜、智妍、孝敏
█/███ ██ █/██◤ ██ █/██ ██ 素妍、居麗、寶藍
████◤ █◤ ◥██◤ █◤ ████◤█◤ 花英 ψmakigoto123
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
※ 編輯: loveme00835 來自: 140.121.197.115 (01/19 04:03)
推
01/19 09:51, , 1F
01/19 09:51, 1F
→
01/19 09:51, , 2F
01/19 09:51, 2F
→
01/19 15:21, , 3F
01/19 15:21, 3F
→
01/19 15:22, , 4F
01/19 15:22, 4F
→
01/19 15:23, , 5F
01/19 15:23, 5F
推
01/19 17:23, , 6F
01/19 17:23, 6F
→
01/19 17:24, , 7F
01/19 17:24, 7F
推
01/19 19:42, , 8F
01/19 19:42, 8F
→
01/19 23:17, , 9F
01/19 23:17, 9F
你現在看 code 會覺得很複雜, 等你把新的功能加進來需要改
架構時就會發現這個算簡單的.
※ 編輯: loveme00835 來自: 140.121.197.115 (01/19 23:28)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章