• <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>

            08年06月10日

            Posted on 2008-06-10 17:27 RichardHe 閱讀(156) 評(píng)論(0)  編輯 收藏 引用
            boost any庫(kù)(轉(zhuǎn))
                1. 可容納許多可能值類(lèi)型的類(lèi)型,比如int和string,并且可在它們之間自由
            轉(zhuǎn)換,例如:將5作為"5"或者反之。這樣的類(lèi)型在腳本語(yǔ)言和其他的解釋型語(yǔ)言中
            較常見(jiàn)。boost::lexical_cast支持這種轉(zhuǎn)換功能。
                2. 含有不同類(lèi)型的值但并不試圖在它們之間進(jìn)行轉(zhuǎn)換的可區(qū)分類(lèi)型,即5嚴(yán)格
            地作為一個(gè)int存放,不能隱式轉(zhuǎn)換為"5"或者5.0。它們不關(guān)心解釋?zhuān)P(guān)心有效
            的類(lèi)型安全性,是單一值的范型容器,不會(huì)產(chǎn)生有歧義的轉(zhuǎn)換。
                3. 不可區(qū)分的類(lèi)型,可以引用任何實(shí)際的類(lèi)型,由程序員來(lái)保證所有形式的
            訪(fǎng)問(wèn)和解釋。C++中的void*提供了這樣的功能,同時(shí)它也會(huì)導(dǎo)致不確定的行為。
               
                any類(lèi)(基于Kevlin Henney在"Valued Conversions"中所述的同名類(lèi))是一個(gè)
            基于第二類(lèi)的可變值類(lèi)型。它支持任意值類(lèi)型的復(fù)制和有安全檢查的提取。一個(gè)提
            供更多合適的運(yùn)算符的類(lèi)似設(shè)計(jì),可用作一個(gè)一般的函數(shù)適配器any_function,一
            個(gè)一般的迭代器適配器any_iterator等等。
            例子

                下面的代碼說(shuō)明使用隱式轉(zhuǎn)換/復(fù)制到any對(duì)象的語(yǔ)法:

            #include <list>
            #include <boost/any.hpp>

            typedef std::list<boost::any> many;

            void append_int(many & values, int value)
            {
                boost::any to_append = value;
                values.push_back(to_append);
            }

            void append_string(many & values, const std::string & value)
            {
                values.push_back(value);
            }

            void append_char_ptr(many & values, const char * value)
            {
                values.push_back(value);
            }

            void append_any(many & values, const boost::any & value)
            {
                values.push_back(value);
            }

            void append_nothing(many & values)
            {
                values.push_back(boost::any());
            }

            下面的判斷謂詞接著前面的定義,說(shuō)明了any對(duì)象上查詢(xún)方法的使用:

            bool is_empty(const boost::any & operand)
            {
                return operand.empty();
            }

            bool is_int(const boost::any & operand)
            {
                return operand.type() == typeid(int);
            }

            bool is_char_ptr(const boost::any & operand)
            {
                try
                {
                    any_cast<const char *>(operand);
                    return true;
                }
                catch(const boost::bad_any_cast &)
                {
                    return false;
                }
            }

            bool is_string(const boost::any & operand)

            {
                return any_cast<std::string>(&operand);
            }

            void count_all(many & values, std::ostream & out)
            {
                out << "#empty == "
                    << std::count_if(values.begin(), values.end(), is_empty) <<
            std::endl;
                out << "#int == "
                    << std::count_if(values.begin(), values.end(), is_int) << std::
            endl;
                out << "#const char * == "
                    << std::count_if(values.begin(), values.end(), is_char_ptr) <<
            std::endl;
                out << "#string == "
                    << std::count_if(values.begin(), values.end(), is_string) <<
            std::endl;
            }

            下面的類(lèi)型源自O(shè)MG的屬性服務(wù),為任意值類(lèi)型定義了名字-值對(duì):

            struct property
            {
                property();
                property(const std::string &, const boost::any &);

                std::string name;
                boost::any value;
            };

            typedef std::list<property> properties;

            下面的基類(lèi)說(shuō)明了基于回調(diào)的運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)方法,其中的回調(diào)函數(shù)擁有任意
            類(lèi)型的參數(shù)。由于C++中缺少虛函數(shù)模板,不同的實(shí)現(xiàn)方法需要在效率,安全性和
            通用性之間作權(quán)衡。使用一個(gè)帶類(lèi)型檢查的可變類(lèi)型提供了一種解決途徑:

            class consumer
            {
            public:
                virtual void notify(const any &) = 0;
                ...
            };


            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            posts - 94, comments - 138, trackbacks - 0, articles - 94

            Copyright © RichardHe

            97超级碰碰碰久久久久| 模特私拍国产精品久久| 国产精品对白刺激久久久| 国产精品久久影院| 美女久久久久久| 国产美女久久精品香蕉69| 国产精久久一区二区三区| 欧美日韩久久中文字幕| 嫩草影院久久99| 波多野结衣久久精品| 一本久久a久久精品综合夜夜| 热久久国产欧美一区二区精品| 无码人妻少妇久久中文字幕蜜桃 | 久久久精品人妻一区二区三区四 | 一本久道久久综合狠狠爱| 精品国产乱码久久久久久郑州公司| 亚洲国产成人久久精品动漫| 亚洲国产高清精品线久久| 久久99精品国产麻豆宅宅| 亚洲成色WWW久久网站| 亚洲乱码日产精品a级毛片久久| 国产高潮国产高潮久久久| 亚洲国产精品无码久久一区二区| 久久久久亚洲AV成人网人人软件| 久久久久亚洲精品无码蜜桃| 日本欧美国产精品第一页久久| 精品国产福利久久久| 五月丁香综合激情六月久久| 四虎影视久久久免费观看| 国内精品久久久久久久涩爱| 99国内精品久久久久久久| 青青青青久久精品国产h| 国产成人久久精品区一区二区| 亚洲精品乱码久久久久久按摩 | 久久精品一本到99热免费| 综合久久给合久久狠狠狠97色| 天堂无码久久综合东京热| 日日狠狠久久偷偷色综合0| 国产真实乱对白精彩久久| 久久se精品一区二区影院| 国产精品成人99久久久久 |