編輯:動機typedef'ing函數*簽名*(不是指針),以便它可以重用?
假設我定義一個Handler類爲
class Handler {
public:
class Message { /*...*/ };
typedef int (*Callback)(Message *msg);
void registerCallback(int msgclass, Callback f);
};
客戶端可以做
int f1(Handler::Message *msg)
{ /* handle message */ }
int f2(Handler::Message *msg)
{ /* handle message */ }
int main(){
Handler h;
h.registerCallback(1, f1);
h.registerCallback(2, f2);
// ....
}
編譯器的確會檢查f1
和f2
是適當的參數registerCallback
,但是,客戶需要定義f1
和f2
正確LY。因爲我已經準備好了,所以我希望客戶端能夠使用它。
編輯完
我想要做這樣的事情:
typedef int arithmetic(int i, int j);
arithmetic sum
{
return i+j;
}
arithmetic max
{
return (i>j)? i:j;
}
// etc.
然而,無論
arithmetic sum
arithmetic sum()
不進行編譯,而且這種
arithmetic sum(int i, int j)
賦予的
func.cpp:4: error: ‘sum’ declared as function returning a function
我想這個原因編譯器錯誤是,我想有一個Handler
類將爲它接受一個回調函數,包括參數列表提供typedef
。
我看不到你想如何傳遞參數到你的算術。在你的例子中,我和j是什麼。 – mkaes 2011-03-04 14:56:08
您可以使用Boost或C++ 0x的功能嗎? – luke 2011-03-04 14:57:57
@ mkaes:對,這是一個錯字,已更正。 – davka 2011-03-04 14:59:56