• <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>
            OldJiang.com

            浩毛的博客

            OldJiang.com
            posts - 14, comments - 81, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
                boost里的program_options提供程序員一種方便的命令行和配置文件進行程序選項設(shè)置的方法。
                其文檔例子中有如下代碼:
               
            1 using namespace boost::program_options;
            2 //聲明需要的選項
            3 options_description desc("Allowed options");
            4 desc.add_options()
            5         ("help,h""produce help message")
            6         ("person,p", value<string>()->default_value("world"), "who");

                看第4到6行,是不是感覺很怪?這種方式體現(xiàn)了函數(shù)式編程中最大的特點:函數(shù)是一類值,引用資料來說,所謂“函數(shù)是一類值(First Class Value)”指的是函數(shù)和值是同等的概念,一個函數(shù)可以作為另外一個函數(shù)的參數(shù),也可以作為值使用。如果函數(shù)可以作為一類值使用,那么我們就可以寫出一些函數(shù),使得這些函數(shù)接受其它函數(shù)作為參數(shù)并返回另外一個函數(shù)。比如定義了f和g兩個函數(shù),用compose(f,g)的風格就可以生成另外一個函數(shù),使得這個函數(shù)執(zhí)行f(g(x))的操作,則可稱compose為高階函數(shù)(Higher-order Function)。

                program_options里的這種方式是怎么實現(xiàn)的呢?通過分析boost的源代碼,我們自己來寫個類似的實現(xiàn)看看:
                 test.h   
             1 #pragma once
             2 
             3 #include <iostream>
             4 using namespace std;
             5 
             6 class Test;
             7 
             8 class Test_easy_init
             9 {
            10 public:
            11     Test_easy_init(Test* owner):m_owner(owner){}
            12 
            13     Test_easy_init & operator () (const char* name);
            14     Test_easy_init & operator () (const char* name,int id);
            15 private:
            16     Test* m_owner;
            17 };
            18 
            19 
            20 class Test
            21 {
            22 public:
            23     void add(const char* name);
            24     void add(const char* name,int id);
            25 
            26     Test_easy_init add_some();
            27 
            28 };

            test.cpp
             1 #include "test.h"
             2 
             3 Test_easy_init & Test_easy_init::operator () (const char* name,int id)
             4 {
             5 
             6     m_owner->add(name,id);
             7     return *this;
             8 }
             9 
            10 
            11 Test_easy_init & Test_easy_init::operator () (const char* name)
            12 {
            13 
            14     m_owner->add(name);
            15     return *this;
            16 }
            17 
            18 Test_easy_init Test::add_some()
            19 {
            20     return Test_easy_init(this);
            21 }
            22 
            23 
            24 void Test::add(const char* name)
            25 {
            26     cout<<"add:"<<name<<endl;
            27 }
            28 
            29 void Test::add(const char* name,int id)
            30 {
            31     cout<<"add:"<<name<<"-"<<id<<endl;
            32 }

            使用方式:
            1 Test t1;
            2 
            3 t1.add_some()
            4     ("hello",1)
            5     ("no id")
            6     ("hello2",2);

            是不是很有意思。add_some()方法返回一個Test_easy_init類的對象,Test_easy_init類重載了操作符(),操作符()方法返回Test_easy_init類對象自身的引用。。

            Feedback

            # re: Boost.Program_options中的一個函數(shù)式編程的例子  回復  更多評論   

            2010-07-06 13:58 by 陳梓瀚(vczh)
            這是聲明式編程(Declarative Programming),跟函數(shù)式還是兩回事。

            # re: Boost.Program_options中的一個函數(shù)式編程的例子  回復  更多評論   

            2010-07-06 22:46 by 飛鴿傳書
            Boost 這個庫確實很強大,不過用的人很少,技術(shù)文檔中文的基本上很少。樓主繼續(xù)介紹,我們繼續(xù)關(guān)注。
            OldJiang.com
            69久久精品无码一区二区| 久久午夜无码鲁丝片| 少妇久久久久久被弄到高潮| 久久这里有精品| 国产成人香蕉久久久久| 久久午夜免费视频| 久久久中文字幕| 色欲久久久天天天综合网精品| 久久婷婷综合中文字幕| 99精品国产综合久久久久五月天 | 女人高潮久久久叫人喷水| 久久国产欧美日韩精品| 国产综合成人久久大片91| 性做久久久久久久| 色偷偷91久久综合噜噜噜噜| 久久久久人妻一区二区三区vr| 日韩久久无码免费毛片软件| 狠狠干狠狠久久| 色欲久久久天天天综合网精品| 一级做a爰片久久毛片看看| 99国内精品久久久久久久| 国产美女久久精品香蕉69| 色综合久久无码中文字幕| 亚洲精品乱码久久久久久按摩| 欧美色综合久久久久久| 久久精品国产72国产精福利| 亚洲狠狠综合久久| 93精91精品国产综合久久香蕉 | 久久久久人妻精品一区| 一本色道久久88综合日韩精品 | 久久国产乱子伦精品免费强| 99精品国产在热久久无毒不卡| 欧美噜噜久久久XXX| 久久精品aⅴ无码中文字字幕不卡| 影音先锋女人AV鲁色资源网久久 | 国产aⅴ激情无码久久| 久久久久综合中文字幕| 亚洲精品无码久久不卡| 久久综合亚洲鲁鲁五月天| 久久精品国产亚洲AV香蕉| 日产精品久久久一区二区|