_di_TFunc__3 - C++ Builder

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


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

template<typename T1, typename T2, typename TResult> using _di_TFunc__3 = System::DelphiInterface<TFunc__3<T1, T2, TResult>>;

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


參數(shù):這個 lambda 表達(dá)式或匿名函數(shù)有兩個參數(shù)栗菜,類型為模板參數(shù) T1 和 T2挑豌,
返回值:為模板參數(shù) TResult 類型纹磺;


  • 調(diào)用 _di_TFunc__3::Invoke(); 可以執(zhí)行 lambda 表達(dá)式蕉斜。
  • 如果函數(shù)的參數(shù)是這個類型的洒试,可以采用繼承 System::TCppInterfacedObject<TFunc__3<T1, T2, TResult>> 并且重載 Invoke 函數(shù)作為這個參數(shù)來代替 lambda 表達(dá)式硼莽,請參考本文后面及 TThread::CreateAnonymousThread 的例子庶溶。
  • 使用 _di_TFunc__3 這個類型需要 clang 編譯器

例1:有個浮點(diǎn)數(shù)數(shù)組,分別用從小到大和從大到小的順序輸出這個數(shù)組里面的數(shù)據(jù)懂鸵,使用 lambda 表達(dá)式:

void TForm1::MyFunc(double *pArray, int iCount, _di_TFunc__3<double, double, int> pLambda)
{
    for(int iMin=0; iMin<iCount-1; iMin++)
    {
        for(int iFind=iMin+1; iFind<iCount; iFind++)
        {
            if(pLambda->Invoke(pArray[iMin], pArray[iFind]) > 0)
            {
                double tmp = pArray[iMin];
                pArray[iMin] = pArray[iFind];
                pArray[iFind] = tmp;
            }
        }
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    double a[8] = { 1.23, 0.69, 3.14, 2.72, 0.02, 9.65, 7.34, 3.33 };

    MyFunc(a, 8, [&](double a, double b)->int { return a > b; });

    Memo1->Lines->Add(L"從小到大:");
    for(int i=0; i<8; i++)
        Memo1->Lines->Add(a[i]);

    MyFunc(a, 8, [&](double a, double b)->int { return a < b; });

    Memo1->Lines->Add(L"從大到衅荨:");
    for(int i=0; i<8; i++)
        Memo1->Lines->Add(a[i]);
}
運(yùn)行結(jié)果

例2:依然是前面例1的 MyFunc 函數(shù),不用 lambda 表達(dá)式矾瑰,采用繼承 System::TCppInterfacedObject<TFunc__3<double, double , int>> 的方法調(diào)用這個函數(shù)

void TForm1::MyFunc(double *pArray, int iCount, _di_TFunc__3<double, double, int> pLambda)
{
    for(int iMin=0; iMin<iCount-1; iMin++)
    {
        for(int iFind=iMin+1; iFind<iCount; iFind++)
        {
            if(pLambda->Invoke(pArray[iMin], pArray[iFind]) > 0)
            {
                double tmp = pArray[iMin];
                pArray[iMin] = pArray[iFind];
                pArray[iFind] = tmp;
            }
        }
    }
}

class TMyProcAsc : public TCppInterfacedObject<TFunc__3<double, double , int>>
{
public:
    int __fastcall Invoke(double a, double b) // 這里是調(diào)用 lambda 執(zhí)行的內(nèi)容
    {
        return a > b;
    }
};

class TMyProcDesc : public TCppInterfacedObject<TFunc__3<double, double , int>>
{
public:
    int __fastcall Invoke(double a, double b) // 這里是調(diào)用 lambda 執(zhí)行的內(nèi)容
    {
        return a < b;
    }
};

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    double a[8] = { 1.23, 0.69, 3.14, 2.72, 0.02, 9.65, 7.34, 3.33 };

    MyFunc(a, 8, new TMyProcAsc); // 用 TMyProcAsc 對象代替 lambda砖茸,自動銷毀

    Memo1->Lines->Add(L"從小到大:");
    for(int i=0; i<8; i++)
        Memo1->Lines->Add(a[i]);

    MyFunc(a, 8, new TMyProcDesc); // 用 TMyProcDesc 對象代替 lambda,自動銷毀

    Memo1->Lines->Add(L"從大到信寡ā:");
    for(int i=0; i<8; i++)
        Memo1->Lines->Add(a[i]);

}

相關(guān):


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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凉夯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子采幌,更是在濱河造成了極大的恐慌劲够,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件休傍,死亡現(xiàn)場離奇詭異征绎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門人柿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柴墩,“玉大人,你說我怎么就攤上這事凫岖〗龋” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵哥放,是天一觀的道長歼指。 經(jīng)常有香客問我,道長甥雕,這世上最難降的妖魔是什么踩身? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮社露,結(jié)果婚禮上挟阻,老公的妹妹穿的比我還像新娘。我一直安慰自己呵哨,他們只是感情好赁濒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著孟害,像睡著了一般拒炎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挨务,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天击你,我揣著相機(jī)與錄音,去河邊找鬼谎柄。 笑死丁侄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的朝巫。 我是一名探鬼主播鸿摇,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼劈猿!你這毒婦竟也來了拙吉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤揪荣,失蹤者是張志新(化名)和其女友劉穎筷黔,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仗颈,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡佛舱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片请祖。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡订歪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出损拢,到底是詐尸還是另有隱情陌粹,我是刑警寧澤撒犀,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布福压,位于F島的核電站,受9級特大地震影響或舞,放射性物質(zhì)發(fā)生泄漏荆姆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一映凳、第九天 我趴在偏房一處隱蔽的房頂上張望胆筒。 院中可真熱鬧,春花似錦诈豌、人聲如沸仆救。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽彤蔽。三九已至,卻和暖如春庙洼,著一層夾襖步出監(jiān)牢的瞬間顿痪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工油够, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蚁袭,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓石咬,卻偏偏與公主長得像揩悄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鬼悠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349

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