一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C++調(diào)用lua函數(shù)的通用call,參數(shù)數(shù)目任意、參數(shù)類型任意

 quasiceo 2014-01-13

C++調(diào)用lua函數(shù)的通用call,參數(shù)數(shù)目任意、參數(shù)類型任意  

2012-10-23 13:07:53|  分類: C++ |  標(biāo)簽:lua  bind  c++temlate  trait  參數(shù)   |字號 訂閱

我們只要用過一些成熟的lua對c++的綁定,例如SLB、luabind或者其他,就會想:為什么它們會這么神奇,可以在C++實現(xiàn)參數(shù)數(shù)目任意、參數(shù)類型任意的函數(shù)。現(xiàn)在我們來探討它們的本質(zhì),這里只討論它們的最初原型,當(dāng)然現(xiàn)實的bind會非常復(fù)雜。

例如:實現(xiàn)調(diào)用lua函數(shù)的通用方法;

call("add",112, 2323.33); // 調(diào)用lua 的add方法,參數(shù)是一個整數(shù)和一個double

call("print","helloworld");// 調(diào)用lua 的 print 方法,參數(shù)是一個C-style 字符串"helloworld"

call("print",222222);// 調(diào)用lua 的 print 方法,參數(shù)是一個整數(shù)

將我們后面討論的方法稍稍修改下,也可以實現(xiàn)上面的神奇調(diào)用。

核心思想

對每種不同的參數(shù)類型 ,分別調(diào)用不同的處理函數(shù)Do()


//原型要首先聲明

template<typename T>

struct Trait

{

       static void Do(T t);  

};

//利用偏特化

template<>

struct Trait<int>

{

       static void Do(int t)

       {

              std::cout<<" Type int "<<t ;

       }

}; 

template<>

struct Trait<float>

{

       static void Do(float t)

       {

              std::cout<<"Type float "<<t ;

       }

};

 

template<>

struct Trait<double>

{

       static void Do(double t)

       {

              std::cout<<" Type double "<<t ;

       }

};

 

//char const *類型 無法從這里實例化,WHY

template<>

struct Trait<char*>

{

       static void Do(chart)

       {

              std::cout<<" Type char* "<<t ;

       } 

};

 

//奇怪的是 char *類型 無法從這里實例化 WHY

template<>

struct Trait<char const*>

{

       static void Do(char constt)

       {

              std::cout<<" Type char const* "<<t ;

       } 

};

 

template<>

struct Trait<std::string>

{

       static void Do(std::string t)

       {

              std::cout<<" Type std::string "<<t ;

       }

};

 


 關(guān)鍵的地方

template<typename T1typename T2>

void Call(T1 t1T2 t2)//自動推導(dǎo)

{   

      // 在函數(shù)內(nèi)部,T1、T2已經(jīng)被推導(dǎo)出來了,因此后面可以直接T1、T2來實例化其他的模版  

    //銜接前后    

       Trait<T1>::Do(t1);

       Trait<T2>::Do(t2);  

};


template<typename T1,typename T2,typename T3 ,typename T4>

void Call(T1 t1,T2 t2,T3 t3 ,T4 t4)

{  

       Trait<T1>::Do(t1);  

       Trait<T2>::Do(t2);  

       Trait<T3>::Do(t3);  

       Trait<T4>::Do(t4);      

};


實現(xiàn)的效果:

Call(11,1111);

Call("hello","world");

Call("HelloGuys");

Call(11, 22.2, 232.3f, std::string("fdsaf"));

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日本黄色美女日本黄色| 黑人巨大精品欧美一区二区区 | 国产精品福利精品福利| 色哟哟国产精品免费视频| 国产不卡最新在线视频| 欧美日韩国产福利在线观看| 蜜桃传媒视频麻豆第一区| 成人免费在线视频大香蕉| 99久久精品久久免费| 欧美日韩视频中文字幕| 最新日韩精品一推荐日韩精品 | 一区二区日本一区二区欧美| 久久老熟女一区二区三区福利| 久久三级国外久久久三级| 亚洲国产精品久久精品成人| 欧美日韩高清不卡在线播放| 亚洲最新av在线观看| 午夜免费精品视频在线看| 国产一级不卡视频在线观看| 午夜亚洲精品理论片在线观看| 97人摸人人澡人人人超碰| 亚洲欧美日韩熟女第一页| 国产丝袜美女诱惑一区二区| 国产又粗又硬又长又爽的剧情| 日本人妻丰满熟妇久久| 日本欧美视频在线观看免费| 一区二区三区日韩中文| 欧美字幕一区二区三区| 男人和女人草逼免费视频| 黄色激情视频中文字幕| 日韩综合国产欧美一区| 国产乱人伦精品一区二区三区四区 | 亚洲欧美日本成人在线| 91日韩在线观看你懂的| 亚洲一区精品二人人爽久久| 老司机精品福利视频在线播放| 色丁香一区二区黑人巨大| 免费黄片视频美女一区| 欧美日韩乱一区二区三区| 国产又粗又猛又大爽又黄同志| 日韩国产传媒在线精品|