_di_TProc__4 - C++ Builder

C++ Builder 參考手冊 ? System::Sysutils ? _di_TProc__4


頭文件:#include <System.SysUtils.hpp>
命名空間:System::Sysutils
類型定義:

template<typename T1, typename T2, typename T3, typename T4>
using _di_TProc__4 = System::DelphiInterface<TProc__4<T1, T2, T3, T4>>;

C++ 匿名函數(shù) / lambda 表達式接口:有 4 個參數(shù)、無返回值的匿名函數(shù) / lambda 表達式艰管,C++ Builder 采用這個接口讓 lambda 表達式與 Delphi 的匿名函數(shù)兼容。


參數(shù):這個 lambda 表達式或匿名函數(shù)有 4 個參數(shù)窒盐,參數(shù)類型為 _di_TProc__4 的模板參數(shù)類型;
返回值:無撤蟆。


  • 調(diào)用 _di_TProc::Invoke(); 可以執(zhí)行 lambda 表達式殖熟。
  • 如果函數(shù)的參數(shù)是這個類型的柬赐,可以采用繼承 System::TCppInterfacedObject<TProc__4<T1, T2, T3, T4>> 并且重載 Invoke 函數(shù)作為這個參數(shù)來代替 lambda 表達式绰姻,請參考本文后面及 TThread::CreateAnonymousThread 的例子枉侧。
  • 使用 _di_TProc__4 這個類型需要 clang 編譯器

例1:寫一個函數(shù) MyFunc,參數(shù)為與 Delphi 匿名函數(shù)兼容的 lambda 表達式狂芋,lambda 表達式有一個 UnicodeString 和 兩個 int 類型的參數(shù)

在 Form1 上放一個 Memo 和一個 Button榨馁,在 Button 的 OnClick 事件里面執(zhí)行 MyFunc 函數(shù),第一個參數(shù)為 TStrings *帜矾,第二個參數(shù)為有一個 UnicodeString 和兩個 int 參數(shù)的 lambda 表達式翼虫;MyFunc 函數(shù)類似于 for_each 枚舉 pStrings 里面所有的行,每一行調(diào)用一次 lambda 表達式屡萤,傳入這一行文字的關(guān)鍵字珍剑、值、行號和總行數(shù):

void TForm1::MyFunc(TStrings *pStrings, _di_TProc__4<UnicodeString, UnicodeString, int, int> pLambda)
{
    int iCount = pStrings->Count;
    for(int iIndex=0; iIndex<iCount; iIndex++)
        pLambda->Invoke(pStrings->Names[iIndex], pStrings->ValueFromIndex[iIndex], iIndex, iCount);
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    MyFunc(Memo1->Lines, [this](UnicodeString sKey, UnicodeString sValue, int iIndex, int iCount){
        ShowMessage(L"第" + IntToStr(iIndex+1) + L"/" + IntToStr(iCount) + L"個關(guān)鍵字:\"" + sKey + L"\"死陆,值:\"" + sValue + L"\"");
    });
}

執(zhí)行結(jié)果:Memo1 里面有兩行文字:"Name=Hsuanlu" 和 "名字=玄坴"招拙,點擊按鈕,在 MyFunc 里面執(zhí)行了 2 次 lambda 表達式措译,分別為這兩行文字的關(guān)鍵字别凤、值、行號和總行數(shù)领虹,可以看到執(zhí)行結(jié)果為兩次彈出消息框规哪,分別為 '第1/2個關(guān)鍵字:"Name",值:"Hsuanlu"' 和 '第2/2個關(guān)鍵字:"名字"塌衰,值:"玄坴"'

執(zhí)行結(jié)果1
執(zhí)行結(jié)果2

例2:依然是前面例1的 MyFunc 函數(shù)诉稍,不用 lambda 表達式,采用繼承 System::TCppInterfacedObject<TProc__2<T1, T2>> 的方法調(diào)用這個函數(shù)

void TForm1::MyFunc(TStrings *pStrings, _di_TProc__4<UnicodeString, UnicodeString, int, int> pLambda)
{
    int iCount = pStrings->Count;
    for(int iIndex=0; iIndex<iCount; iIndex++)
        pLambda->Invoke(pStrings->Names[iIndex], pStrings->ValueFromIndex[iIndex], iIndex, iCount);
}

class TMyProc : public TCppInterfacedObject<TProc__4<UnicodeString, UnicodeString, int, int>>
{
public:
    void __fastcall Invoke(UnicodeString sKey, UnicodeString sValue, int iIndex, int iCount) // 這里是調(diào)用 lambda 執(zhí)行的內(nèi)容
    {
        ShowMessage(L"第" + IntToStr(iIndex+1) + L"/" + IntToStr(iCount) + L"個關(guān)鍵字:\"" + sKey + L"\"猾蒂,值:\"" + sValue + L"\"");
    }
};
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    MyFunc(Memo1->Lines, new TMyProc()); // 用 TMyProc 對象代替 lambda均唉,自動銷毀
}

新版 C++ 的 lambda 表達式書寫方便是晨,由于參數(shù)是 _di_TProc__4 類型的肚菠,C++ Builder 的編譯結(jié)果會把前面 例1 的 lambda 表達式編譯成類似于 例2 的代碼,所以說他們的執(zhí)行效率應(yīng)該是一樣的罩缴。


相關(guān):


C++ Builder 參考手冊 ? System::Sysutils ? _di_TProc__4

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚊逢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子箫章,更是在濱河造成了極大的恐慌烙荷,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件檬寂,死亡現(xiàn)場離奇詭異终抽,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門昼伴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匾旭,“玉大人,你說我怎么就攤上這事圃郊〖劾裕” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵持舆,是天一觀的道長色瘩。 經(jīng)常有香客問我,道長逸寓,這世上最難降的妖魔是什么居兆? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮竹伸,結(jié)果婚禮上史辙,老公的妹妹穿的比我還像新娘。我一直安慰自己佩伤,他們只是感情好聊倔,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著生巡,像睡著了一般耙蔑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上孤荣,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天甸陌,我揣著相機與錄音,去河邊找鬼盐股。 笑死钱豁,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的疯汁。 我是一名探鬼主播牲尺,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼幌蚊!你這毒婦竟也來了谤碳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤溢豆,失蹤者是張志新(化名)和其女友劉穎蜒简,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漩仙,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡搓茬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年犹赖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卷仑。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡冷尉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出系枪,到底是詐尸還是另有隱情雀哨,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布私爷,位于F島的核電站雾棺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏衬浑。R本人自食惡果不足惜捌浩,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望工秩。 院中可真熱鬧尸饺,春花似錦、人聲如沸助币。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽眉菱。三九已至迹栓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間俭缓,已是汗流浹背克伊。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留华坦,地道東北人愿吹。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像惜姐,于是被迫代替她去往敵國和親犁跪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容