青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

qiezi的學習園地

AS/C/C++/D/Java/JS/Python/Ruby

  C++博客 :: 首頁 :: 新隨筆 ::  ::  :: 管理 ::
asgard項目已經準備了一段時間了,不過有些基本問題還需要考慮,也有一些是新發現的問題,以及自認為比較好的解決辦法。

通過第2、第4條的仔細研究,已經漸漸完善、明確了動態部分和靜態部分的關系,使得Method包裝類所完成的功能漸漸接近于一個函數,而元信息則脫離具體的對象提升到全局(當然還有些小問題沒有解決)。

1、參數名稱的問題。

為了與SOAP等基于XML的協議兼容,必須開始就把參數名稱考慮在內。

代碼經過C++編譯器編譯以后,類型、變量名稱等都不復存在,唯一留下的是RTTI,顯然不能解決這個問題。所以只能在定義時把它加入。

BEGIN_SERVICE(TestService)
    METHOD (
void(in<int>, inout<string>out<short>), method1, index, info, result);
END_SERVICE()

如果使用這種方式,index, info, result分別表示變量名字,在宏里面轉成字符串,看起來好像不太舒服,而且宏不支持參數個數變化。

BEGIN_SERVICE(TestService)
    METHOD (
void(in<int>, inout<string>out<short>), method1, "(index, info, result)");
    METHOD (
int(in<int>, inout<string>), method2, "result(index, info)");
END_SERVICE()

這種可能稍稍舒服一點,在Method構造函數或其它地方解析這個字符串,賦給各個參數。不過它的缺點是把編譯期應該檢查出來的錯誤,延遲到運行期。如果在編譯期來做,又會使接口描述變得很復雜。

只是為了得到參數的名字,就要增加這么些麻煩。

c++0x只是一個庫的標準,估計XTI也不會加入這些特性,而且c++0x很遙遠,所以暫時以這種方式來做。

暫時的解決辦法:

BEGIN_SERVICE(TestService)
    METHOD (
void(in<int>, inout<string>out<short>), method1);
    METHOD (
int(in<int>, inout<string>), method2);
    BEGIN_SERVICE_DEFINE(TestService)
        METHOD_DEFINE (method1, 
"(index, info, result)", test_func);
        METHOD_DEFINE (method2, 
"result(index, info)"&Test::test_method);
    END_SERVICE_DEFINE()
END_SERVICE()

缺點是參數名稱中的錯誤,要延遲到運行期才能解決掉。

2、服務對象的大小。

如果客戶端要調用其中一個方法,生成一個TestService,則構造成本太高,特別是一個服務中有多個方法的時候。一個服務容納了多個方法,而每個方法包含一個vector,以及各個參數,這還沒考慮以后的擴展。

所以應該修改調用方式,讓它只只需要生成調用所需的最小(少)對象。

這部分考慮還不成熟,暫時可以不管它,而以方法作為考慮的對象。

暫時想到的解決辦法:

Method對象中的parameters容器和各個參數,只在調用operator ()或async_call時,才真正生成出來。

這樣的話,Method對象中僅保存一個空的vector。

甚至這個vector也可以只是一個空指針,當調用那幾個函數時,才生成一個。

暫時把這個過程命名為Create On Call(COC)。

COC的好處是顯而易見的,每個對象將只有8字節,虛表指針+數據對象的指針,“數據對象”是實際調用時才生成的對象,包括參數vector容器、回調函數指針(可能由動態生成一個委托對象,以適應廣泛類型的回調函數)、對象鎖(防止干擾到前一個調用)。初始化成本接近0(虛函數表的初始化忽略不計)。

當調用operator()或async_call時(以下簡稱CALL),將調用create_parameters虛函數,動態生成一個vector。這樣,沒有調用到的Method不會象原來一樣影響到服務對象的構建性能。

這就要求把Method的“元”信息提到全局,當然更符合“元”的本意,原來由服務對象查詢Method以獲得“元”信息的過程,現在看來也是不合理的。

3、in模板可以省略。

in是默認的參數類型,返回值則默認為out類型,這都是不需要明確指定的。

解決辦法:

這個問題是比較好解決的,在InOutTypeTraits模板類中,為各個偏特化版本定義一個type類型,InOutTypeTraits<T>::type的類型為in<T>,InOutTypes<in<T>>::type的類型為in<T>,InOutTypes<inout<T>>::type的類型為inout<T>,InOutTypes<out<T>>::type的類型為out<T>,InList模板類中進行這種轉換。

4、異步調用隊列。

在第2點中介紹道:

每個對象將只有8字節,虛表指針+數據對象的指針,“數據對象”是實際調用時才生成的對象,包括參數vector容器、回調函數指針(可能由動態生成一個委托對象,以適應廣泛類型的回調函數)、對象鎖(防止干擾到前一個調用)。初始化成本接近0(虛函數表的初始化忽略不計)。

提到了對象鎖,這是一種低效的做法,可以使用異步調用隊列來替代它。

解決辦法:

當開始一個調用時,臨時生成上面所說的“數據對象”,交由一個調用隊列去完成。這時,由于Method對象基本不管理數據,所以它成了一個空殼,作用是保存類型信息。

異步調用最好的實現就是整個系統都由異步調用構成,而同步調用是由異步調用模擬而成。原本打算繞過這種方式,用最簡單的方法來做,現在好像又繞回來了。

上面這個做法,很好地把元信息和真實數據分開了,所以打算改成這種結構。

5、全局元信息。

通過第4條的研究,已經使得Method對象成為一個空殼,而“數據對象”在沒有調用時又不生成,使得自省結構必須重新做。

考察了java等語言的自省,也打算把元信息的位置提升到全局,而每個Method對象將只保留一個全局元信息的指針,這樣應該更自然。


(以后遇到的問題只更新到這個文檔中)
posted on 2005-09-24 17:00 qiezi 閱讀(427) 評論(0)  編輯 收藏 引用 所屬分類: C++asgard項目
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            麻豆精品一区二区综合av| 亚洲第一精品福利| 午夜精品久久久久久99热| 99视频精品全国免费| 亚洲精品永久免费| 亚洲一区二区三区精品在线| 亚洲欧美一区二区原创| 久久九九国产精品怡红院| 女人色偷偷aa久久天堂| 欧美久久久久久| 国产精品国产三级国产专播精品人| 国产精品美女999| 极品少妇一区二区三区| 日韩一级在线| 久久se精品一区二区| 欧美 日韩 国产一区二区在线视频| 亚洲国产欧美一区二区三区同亚洲 | 午夜国产欧美理论在线播放| 久久精品理论片| 亚洲第一区在线| 亚洲欧美国产三级| 免费亚洲电影在线观看| 国产欧美日韩另类视频免费观看| 亚洲高清色综合| 新片速递亚洲合集欧美合集| 亚洲高清激情| 午夜国产精品视频免费体验区| 欧美暴力喷水在线| 国产亚洲午夜| 亚洲欧美成人精品| 91久久在线视频| 久久蜜臀精品av| 国产精品免费福利| 日韩视频一区二区三区| 久久噜噜亚洲综合| 99精品99久久久久久宅男| 欧美亚洲在线观看| 99热在线精品观看| 欧美xx视频| 亚洲福利久久| 久久久人人人| 午夜久久久久久久久久一区二区| 欧美激情四色| 亚洲欧洲免费视频| 榴莲视频成人在线观看| 午夜精品久久久久久久白皮肤| 欧美精品激情| 亚洲国产精品专区久久| 免费国产一区二区| 久久免费视频一区| 一区二区在线不卡| 久久综合电影一区| 久久久天天操| 国内外成人免费激情在线视频网站 | 欧美不卡视频一区发布| 在线精品视频一区二区| 久久天堂国产精品| 久久国产精品网站| 国内激情久久| 欧美顶级艳妇交换群宴| 久色婷婷小香蕉久久| 亚洲激情欧美| 亚洲第一在线综合网站| 欧美成人tv| 一区二区久久久久久| 亚洲另类在线视频| 国产精品久久久久久久app| 欧美亚洲色图校园春色| 性欧美xxxx大乳国产app| 一区免费在线| 亚洲国产成人精品久久久国产成人一区 | 亚洲伊人伊色伊影伊综合网| 国产精品激情电影| 亚洲一区网站| 亚洲欧美激情在线视频| 国产亚洲一区二区精品| 免费日韩精品中文字幕视频在线| 免费在线日韩av| 亚洲社区在线观看| 亚洲欧美国产高清va在线播| 国产自产高清不卡| 亚洲韩国日本中文字幕| 欧美系列一区| 老**午夜毛片一区二区三区| 欧美高清视频www夜色资源网| 亚洲色诱最新| 久久久久久久999精品视频| 亚洲精品极品| 久久一区欧美| 欧美成人精品一区二区| 欧美一进一出视频| 美女视频黄a大片欧美| 亚洲一区二区三区四区在线观看 | 欧美日韩免费高清| 久久成人国产精品| 免费久久99精品国产自在现线| 亚洲一区尤物| 久久最新视频| 欧美在线观看网址综合| 欧美国产日韩一区二区在线观看| 香蕉免费一区二区三区在线观看| 久久av一区二区三区亚洲| 亚洲啪啪91| 欧美在线免费播放| 亚洲一区二区在线| 欧美国产另类| 久久久综合免费视频| 国产精品swag| 亚洲欧洲在线一区| 在线观看视频一区二区欧美日韩| 亚洲一区二区三区在线播放| 99精品欧美一区| 久久综合综合久久综合| 久久久久久久高潮| 国产精品日韩在线一区| 一区二区三区精品视频在线观看 | 国产精品男女猛烈高潮激情| 欧美成人福利视频| 国产自产在线视频一区| 亚洲一区二区三区高清| 99精品国产在热久久| 欧美.日韩.国产.一区.二区| 久久亚洲捆绑美女| 国产亚洲成av人片在线观看桃| 在线视频亚洲欧美| 在线视频亚洲| 欧美日韩免费网站| 亚洲精品在线二区| 亚洲人体影院| 欧美高清视频一区二区| 欧美高清在线一区二区| 亚洲第一黄网| 免费久久99精品国产自| 亚洲第一精品夜夜躁人人爽| 亚洲激情视频在线观看| 欧美国产先锋| 日韩一区二区精品视频| 亚洲性av在线| 国产精品伊人日日| 欧美一级免费视频| 快she精品国产999| 最新国产乱人伦偷精品免费网站| 欧美aⅴ99久久黑人专区| 亚洲欧洲日产国码二区| 亚洲午夜精品17c| 国产精品一区二区视频| 久久精品成人| 欧美韩日一区| 亚洲桃花岛网站| 国产精品无码永久免费888| 午夜在线电影亚洲一区| 免费不卡视频| 在线亚洲激情| 国产一区二区0| 欧美黑人多人双交| 一区二区三区四区五区精品视频 | 午夜视黄欧洲亚洲| 久久野战av| 亚洲精品久久久久久久久| 欧美精品三级日韩久久| 亚洲无亚洲人成网站77777 | 亚洲一区二区三区在线看| 欧美性大战久久久久| 午夜精品久久久久久久久久久久久 | 亚欧成人精品| 在线免费不卡视频| 欧美丝袜一区二区| 久久精品视频一| aa亚洲婷婷| 免费久久精品视频| 亚洲免费综合| 在线精品一区二区| 欧美日韩在线三级| 久久三级福利| 亚洲一区二区成人| 欧美电影专区| 欧美一区视频| 9l国产精品久久久久麻豆| 国产揄拍国内精品对白| 欧美连裤袜在线视频| 久久国产一区| 亚洲图片在线观看| 亚洲日本中文字幕| 蜜臀av性久久久久蜜臀aⅴ| 午夜日韩在线| 一本色道久久综合狠狠躁篇的优点| 国产一区二区精品久久99| 欧美日韩一区二区在线视频| 美女亚洲精品| 久久久久久久网站| 午夜天堂精品久久久久| 一区二区欧美亚洲| 亚洲黄网站黄| 欧美国产日韩一区二区在线观看| 久久精品青青大伊人av| 性欧美video另类hd性玩具| 亚洲午夜视频| 一区二区欧美激情| 日韩视频免费看| 99re视频这里只有精品|