由於這段時間較忙,自從上次我發布了乙個供初學者學習的「mfc」程式後,就沒怎麼寫文章了。這段時間在忙新的專案,專案邏輯還算複雜,用了好多有閃光點的技術,下面我要討論的是閃光點之一:在c++中實現c#的delegate機制。
用過c#的朋友都覺得c#的確是個好語言,但有時由於特殊需要,不得不用c++,在c++中要想實現c#中的thread等也是可行的,不過**要稍複雜。
以例子來說明:
class sdk這個例子比較簡單,sdk用來實現某個功能,client是客戶程式,要想在m_sdk做處理的時候能傳送通知到client,有幾個方法可以實現, 其一是發執行緒訊息,其一是**,但傳統的**對物件導向的支援並不好,這就是實現delegate的出發點。 下面是乙個實現:; class client
void onmessage()
}
class delegate有了上面**,再稍加修改sdk和client**就能實現事件通知了:virtual void operator()(void) = 0;
}; template class delegateimpl : public delegate
virtual void operator()(void)
};
class sdkvoid dosomething()
void dosomething()
void ondosomething()
/ virtual r operator()(void) = 0;/
};/ template/
class name##delegateimpl : public name##delegate/
/ virtual r operator()(void)/
/};/
template/
name##delegate* make##name##delegate(c* c, f f)/
////delegate 1
#define define_delegate(name, r, p1)/
class name##delegate/
/ virtual r operator()(p1 p1) = 0;/
};/ template/
class name##delegateimpl : public name##delegate/
/ virtual r operator()(p1 p1)/
/};/
template/
name##delegate* make##name##delegate(c* c, f f)/
////delegate 2
#define define_delegate(name, r, p1, p2)/
class name##delegate/
/ virtual r operator()(p1 p1, p2 p2) = 0;/
};/ template/
class name##delegateimpl : public name##delegate/
/ virtual r operator()(p1 p1, p2 p2)/
/};/
template/
name##delegate* make##name##delegate(c* c, f f)/
/*//
//sample
define_delegate(open, void, int, string)
class sdk
void open() };
class client
void open()
void onopen()
void onopen2(int t, string str) };
*/
C 中的委託 delegate
delegate,中文意為 委託 是c 中新引入的乙個概念。我個人的理解,delegate相當於c 中函式指標在oop程式設計下的封裝。delegate的用途,如同函式指標的功能一樣,是為了在類似啟動執行緒 通用庫中的高階函式 以及事件處理等場合中,把乙個方法,或者說函式,作為乙個引數來傳遞。del...
C 中的delegate 委託
委託是乙個類,它定義了方法的型別,使得可以將方法當作另乙個方法的引數來進行傳遞,這種將方法動態地賦給引數的做法,可以避免在程式中大量使用if else switch 語句,同時使得程式具有更好的可擴充套件性。我的理解 委託相當於就是乙個函式,它有某種功能,其變數是一種方法,通過委託能夠間接的呼叫該方...
C 中的delegate是什麼?
1.c 中的delegate是什麼,有什麼用?delegate是委託,類似於在c語言中的函式指標,類a的方法m給類b使用,在類b中可以呼叫方法m.這裡委託是吧方法作為引數傳遞。1.1delegate和函式指標的區別?函式指標只能指向靜態的函式,但是delegate修飾的函式既可以引用靜態函式,有可以...