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

cpp小菜園

簡單即是複雜

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  2 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

常用鏈接

留言簿(3)

我參與的團(tuán)隊(duì)

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

2012年11月4日 #


一直都被fft吸引著,翻了下《信號與系統(tǒng)》,用純c++實(shí)現(xiàn)了一遍,算是把原理弄透了,然後想到了多項(xiàng)式擬合,翻書翻到了內(nèi)積空間,還淺淺地了解一下小波分析,覺得用隨筆來把原理說透恐怕篇幅不夠,還是先弄個文檔什麼的吧
這裡先放幾張圖開個頭,有時間補(bǔ)全再說吧,顯示部份用了mgl



主要就是驗(yàn)證一下把方波拆分成不同頻率的信號

posted @ 2012-11-04 00:10 廷 閱讀(264) | 評論 (0)編輯 收藏

2012年4月25日 #


  最近(其實(shí)也有一段時間了),在c++項(xiàng)目中需要用到類似java的反射機(jī)制,時間也比較趕,只能周圍看看有沒有現(xiàn)成的庫可用了,找到的資料也不算少,但多數(shù)都是關(guān)于動態(tài)創(chuàng)建類的,有點(diǎn)像工廠模式,而我需要的,是把實(shí)體類中的屬性反射出來。最后,找到了一個叫LibReflection的東西,雖然后來還是沒用上這個,但是稍微看了一下代碼,還是有不少收獲,所以就在這里記錄下來了,當(dāng)做學(xué)習(xí),也當(dāng)做對這個庫的一個分析吧。
  LibReflection是屬性和函數(shù)反射都有實(shí)現(xiàn)的,而整個庫竟然就一個h文件,本人精力有限,只把屬性反射抽取出來,相信離實(shí)際應(yīng)用也有距離,如果有人路過看到,請體諒別拍磚了。
  那么,首先看一下使用:

    TestClass inst;
    tat::tat_class *test_class = TestClass::get_class_ptr();
    std::map<std::string,tat::tat_field> field_map = test_class->get_fields();
    tat::tat_field test_vec_field = field_map.find("_vec_f")->second;
    std::vector<int> vec;
    test_vec_field.get(&inst,vec);
    vec.push_back(22);
    test_vec_field.set(&inst,vec);
    std::cout<<inst._vec_f[0]<<std::endl;

  TestClass類先不給出,反正就是該類有一個名字為“_vec_f”的屬性,類型是std::vector<int>,然后這段代碼通過反射修改_vec_f的內(nèi)容。。至于tat_class和tat_field,相信熟悉java的人都能猜出是什么了。
  獲取及設(shè)置一個實(shí)例的成員變量的值不是難事,用一個宏就可以了:

#define _OFFSET_(_Obj_Ty,_Key)                                                    \
    ((unsigned long)(&((_Obj_Ty *)0)->_Key))

   這個宏應(yīng)該也不難理解,就是獲取成員變量相對實(shí)例指針的偏移值。而關(guān)鍵問題是,如何通過變量名稱就能查找出這個偏移呢?如何在變量初始化的時候就能記錄下這個偏移呢?我們可以通過宏來聲明變量,那么聲明的時候就可以做一些事情了,但具體做些什么,還是沒頭緒。
  這個問題自己思考了一段時間,無果。然后看了一下實(shí)現(xiàn),深感自己的基礎(chǔ)還沒過關(guān),其實(shí)說白了就是兩個東西:構(gòu)造函數(shù)、靜態(tài)成員變量。
  我們的目標(biāo)是很明確的,要做到j(luò)ava的效果,結(jié)合上面那個宏,也不難想象出Class和Field類的樣子(這里是tat_class和tat_field),tat_class無非就是保存了一個map,key是屬性的名稱,value是tat_field,至于tat_field就簡單了,核心就是保存內(nèi)存的偏移值,再提供操作值的接口就可以了。
  先來看看tat_class:

    class tat_class
    {
    private:
        std::map<std::string,tat_field> _field_map;
        std::string _key;
    public:
        std::map<std::string,tat_field> get_fields()
        {
            return this->_field_map;
        }
        tat_field get_field(std::string key)
        {
            std::map<std::string,tat_field>::iterator itr = _field_map.find(key);
            return (*itr).second;
        }
        void add_field(const tat_field &field)
        {
            _field_map.insert(std::pair<std::string,tat_field>(field.get_key(),field));
        }
    };

  沒有什么理解上的難點(diǎn)吧。
  然后看看tat_field:

    class tat_field
    {
    private:
        unsigned long _offset;
        std::string _key;
    public:
        tat_field(unsigned long offset,std::string key):_offset(offset),_key(key){}
        tat_field(const tat_field &field)
        {
            this->_offset = field._offset;
            this->_key = field._key;
        }
    public:
        template<typename _Obj_Ty,typename _Value_Ty>
        void get(_Obj_Ty *obj,_Value_Ty &value)
        {
            value = *((_Value_Ty *)((unsigned char *)obj + _offset));
        }
        template<typename _Obj_Ty,typename _Value_Ty>
        void set(_Obj_Ty *obj,const _Value_Ty &value)
        {
            *((_Value_Ty *)((unsigned char *)obj + _offset)) = value;
        }
        std::string get_key() const
        {
            return this->_key;
        }
    };

  變量值的get和set函數(shù)使用了模板,這是為了使用的時候能作簡單的類型推斷。
  然后就是重點(diǎn)了,如何在聲明類的時候就把tat_class注入呢?如前面說的,靜態(tài)成員變量:

#define CLASS_REGISTER(_Obj_Ty)                                                    \
public:                                                                            \
    static tat::tat_class * get_class_ptr()                                        \
    {                                                                            \
        static tat::tat_class __class_##_Obj_Key##__;                            \
        return &__class_##_Obj_Key##__;                                            \
    }

  這個宏做了兩件事:第一,聲明靜態(tài)函數(shù)get_class_ptr(),返回tat_class類型,第二,當(dāng)然就是初始化tat_class了,因?yàn)橥瑯邮庆o態(tài),所以不同的實(shí)例就共享了。
  接下來是另一個重點(diǎn),如何在聲明成員變量的時候把tat_field注入到tat_class中,還是用宏解決:

#define FIELD_REGISTER(_Access,_Field_Ty,_Field_Key,_Obj_Ty)                    \
_Access:                                                                        \
    _Field_Ty _Field_Key;                                                        \
private:                                                                        \
    class __field_register_##_Field_Key##__                                        \
    {                                                                            \
    public:                                                                        \
        __field_register_##_Field_Key##__()                                        \
        {                                                                        \
            static tat::__field_register__ reg_##_Field_Key(                    \
                _Obj_Ty::get_class_ptr(),                                        \
                _OFFSET_(_Obj_Ty,_Field_Key),                                    \
                #_Field_Key);                                                    \
        }                                                                        \
    }_Field_Key##_register;

  分析這個宏,首先當(dāng)然是聲明變量了;然后就是一個神秘的類:__field_register_##_Field_Key##__,這個類就只有一個構(gòu)造函數(shù),構(gòu)造函數(shù)里面又是一個靜態(tài)變量,類型是tat::__field_register__,可以想象得到,既然tat_class已經(jīng)可以聲明出來了,tat_field自然也沒有難度,但聲明是不足夠的,還需要放到tat_class的map里面才算完成,在聲明一個變量的時候,能做事的地方,我只能想到是構(gòu)造函數(shù)了,所以就有了剛剛那個神秘的類,那個類的唯一作用就是其構(gòu)造函數(shù),而構(gòu)造函數(shù)里面聲明靜態(tài)變量,則是防止多次實(shí)例化類帶來的冗余數(shù)據(jù),確保一個成員變量只有一個tat_field;
  剩下的關(guān)鍵,就是tat::__field_register__了:

    class __field_register__
    {
    public:
        __field_register__(tat_class *class_ptr,unsigned long offset,std::string key)
        {
            tat_field field(offset,key);
            class_ptr->add_field(field);
        }
    };

  沒有什么神秘的地方,這個東西就這么完成了。
  差點(diǎn)忘了TestClass的聲明:

#include "fieldref.h"

class TestClass
{
public:
    TestClass(void);
    ~TestClass(void);

    CLASS_REGISTER(TestClass)
    FIELD_REGISTER(public,long,_long_f,TestClass)
    FIELD_REGISTER(public,int,_int_f,TestClass)
    FIELD_REGISTER(public,std::string,_str_f,TestClass)
    FIELD_REGISTER(public,std::vector<int>,_vec_f,TestClass)
};

  好吧,如果說到實(shí)際應(yīng)用的問題,灑家確實(shí)沒有考慮太多,反正測試函數(shù)能跑,結(jié)果也對了,灑家也就滿足了,就單純的當(dāng)做是一次實(shí)驗(yàn),或者是學(xué)習(xí)而已。
posted @ 2012-04-25 13:18 廷 閱讀(4073) | 評論 (0)編輯 收藏

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品免费在线| 一区二区三区黄色| 性娇小13――14欧美| 亚洲大片免费看| 久久久久99| 99re66热这里只有精品4| 激情一区二区| 国产日韩欧美视频在线| 午夜伦理片一区| 中文日韩欧美| 欧美在线视频网站| 久久久天天操| 久久精品女人天堂| 欧美/亚洲一区| 欧美国产三区| 一本色道久久综合亚洲精品不卡 | 亚洲精品护士| 在线欧美影院| 一区二区三区精密机械公司 | 欧美经典一区二区| 欧美不卡在线| 欧美日本在线看| 激情久久五月| 欧美亚洲综合另类| 一区二区三区视频在线| 亚洲电影av| 一区二区三区久久久| 久久不见久久见免费视频1| 欧美成人综合| 久久av一区二区三区漫画| 老司机午夜精品视频| 国产精品日韩欧美一区二区| 韩日午夜在线资源一区二区| 亚洲一区二区网站| 亚洲国产精品激情在线观看| 亚洲三级影片| 久久久久久久高潮| 一区二区三区国产盗摄| 欧美精品www| 亚洲精品黄色| 日韩视频一区二区三区在线播放免费观看 | 亚洲国产精品久久久久秋霞影院| 亚洲国产精品久久精品怡红院| 午夜精品久久久久久久久 | 亚洲视频一区二区在线观看 | 午夜精品久久久久久久| 欧美日韩伦理在线| 夜夜精品视频| 亚洲综合色在线| 国产一区在线视频| 美日韩精品免费观看视频| 久久深夜福利| 日韩性生活视频| 夜夜嗨av一区二区三区网页| 亚洲电影免费观看高清完整版在线观看 | 欧美国产丝袜视频| 亚洲国产欧美一区二区三区同亚洲 | 欧美jjzz| 亚洲永久字幕| 久久狠狠亚洲综合| 亚洲毛片网站| 亚洲一区二区黄色| 亚洲欧洲综合另类在线| 亚洲特级毛片| 亚洲国产一区在线观看| 日韩午夜精品| 亚洲高清不卡在线| 欧美一区二区三区四区在线观看地址| 国产一区二区丝袜高跟鞋图片| 男人的天堂亚洲在线| 国产精品国产三级国产aⅴ浪潮| 久久久天天操| 国产精品视频大全| 亚洲靠逼com| 一区二区冒白浆视频| 久久久一二三| 国产精品久久久久久五月尺| 亚洲天堂av图片| 欧美精品18| 亚洲区在线播放| 亚洲精品免费观看| 麻豆精品一区二区av白丝在线| 这里是久久伊人| 国产精品对白刺激久久久| 中日韩高清电影网| 久久精品一区四区| 国产午夜精品美女毛片视频| 亚洲美女视频| 久久aⅴ国产紧身牛仔裤| 国产一区二区三区高清在线观看 | 老牛国产精品一区的观看方式| 亚洲影院色无极综合| 国产模特精品视频久久久久| 午夜欧美精品| 欧美高清视频一区二区三区在线观看| 国产人成精品一区二区三| 欧美亚洲免费| 亚洲国产精品日韩| 欧美一区二区三区视频在线观看| 国产欧美一二三区| 久久一区二区三区四区五区| 亚洲人精品午夜| 蜜臀av性久久久久蜜臀aⅴ| 日韩视频免费观看| 国语自产精品视频在线看一大j8| 免费观看在线综合色| 亚洲网站在线看| 亚洲韩日在线| 欧美激情自拍| 久久九九久精品国产免费直播| 日韩视频欧美视频| 国产一区二区三区四区在线观看| 亚洲欧美一区二区在线观看| 国产在线欧美| 国产欧美视频一区二区| 欧美三级日本三级少妇99| 免费观看欧美在线视频的网站| 亚洲欧美日韩在线综合| 一区二区三区国产盗摄| 亚洲国产欧美久久| 噜噜噜噜噜久久久久久91 | 国产精品www色诱视频| 欧美mv日韩mv国产网站app| 欧美在线观看网站| 久久精品在线视频| 免费在线播放第一区高清av| 久久夜色撩人精品| 一本色道久久综合亚洲精品不| 亚洲福利视频专区| 99精品国产热久久91蜜凸| 亚洲国产你懂的| 亚洲天堂免费观看| 久久久亚洲成人| 亚洲欧洲美洲综合色网| 亚洲精品欧美极品| 午夜视频久久久久久| 久久综合综合久久综合| 欧美精品一区二区在线播放| 欧美视频中文一区二区三区在线观看| 欧美日本韩国一区二区三区| 国产欧美精品国产国产专区| 亚洲电影免费观看高清完整版| 亚洲美女黄网| 久久噜噜噜精品国产亚洲综合| 欧美国产第一页| 欧美亚洲系列| 国产精品羞羞答答xxdd| 亚洲韩国一区二区三区| 欧美亚洲午夜视频在线观看| 久久一区二区三区四区| 亚洲一区精品在线| 亚洲影视九九影院在线观看| 亚洲国产导航| 亚洲女人天堂成人av在线| 欧美r片在线| 亚洲人屁股眼子交8| 欧美不卡视频一区| 欧美v日韩v国产v| 亚洲国产欧美一区二区三区同亚洲 | 亚洲欧美999| 国产精品99久久久久久宅男| 欧美3dxxxxhd| 亚洲天堂成人| 一区二区不卡在线视频 午夜欧美不卡在 | 午夜视频在线观看一区二区三区| 亚洲日本电影在线| 欧美日韩国产小视频| 亚洲黄色视屏| 日韩小视频在线观看| 欧美国产日本在线| 亚洲视频每日更新| 欧美一级成年大片在线观看| 国产无一区二区| 欧美成人免费一级人片100| 美女精品在线观看| 午夜精品在线看| 乱码第一页成人| 亚洲欧美另类中文字幕| 久久精品视频在线播放| 亚洲国产精品久久久久| 日韩视频中午一区| 一区二区在线不卡| 亚洲理论在线| 午夜精品福利在线| 日韩网站免费观看| 亚洲欧美日韩精品久久久| 91久久久久| 久久成人av少妇免费| 亚洲欧美日韩直播| 欧美成人按摩| 欧美顶级少妇做爰| 国内精品久久久久久| 亚洲精品国产精品国自产观看| 国产一区二区三区久久| 亚洲永久视频| 午夜精品免费在线| 国产精品99免费看 | 国产精品国产福利国产秒拍 | 亚洲国产精品尤物yw在线观看 | 久久精品国产一区二区三区免费看|