• <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>
            隨筆-380  評論-37  文章-0  trackbacks-0
            介紹
                Boost狀態(tài)機庫一個應(yīng)用程序框架,你可以用它將UML狀態(tài)圖快速的轉(zhuǎn)換為可執(zhí)行的c++代碼,而不需要任何的代碼生成器。它支持幾乎所有的UML特征,可以直接了當?shù)霓D(zhuǎn)換,并且轉(zhuǎn)換后的c++代碼就像對狀態(tài)機進行一次文本描述一樣具體可讀性。

            如何閱讀這個教程
                這個教程是以線性閱讀的方式進行的章節(jié)設(shè)計。如果你是第一次看這個教程的話,你可以從頭開始讀,到你覺得了解的東西對你手頭的任務(wù)來說已經(jīng)足夠時就停止。具體可以這樣:
                * 如果你的任務(wù)是要實現(xiàn)一個小的、簡單的,并且有很少幾個狀態(tài)的狀態(tài)機,那么下面的“初級主題:秒表”里所講的就差不多夠你用的了。
                * 如果你要做一個有很多狀態(tài)的大型狀態(tài)機,你可以看一下“中級主題:數(shù)碼相機”,那里的講解可能對你有幫助。
                * 最后,如果你是一個要創(chuàng)建異常復(fù)雜狀態(tài)機的用戶,或者是一個想要評估一個Boost狀態(tài)機的設(shè)計師的話,你就要看一下“高級主題”部分。并且,我還強烈建議你看一下Rationle里的Limitions部分。

            Hello World!
                我們將要從一個最簡單程序開始我們的第一步,狀態(tài)圖如下:

            對于這個狀態(tài)圖,我們的實現(xiàn)代碼如下:
             1#include <boost/statechart/state_machine.hpp>
             2#include <boost/statechart/simple_state.hpp>
             3#include <iostream>
             4
             5namespace  sc = boost::statechart;
             6
             7// 為了避免寫public,下面聲明的類型全部為struct。
             8// 如果你不在乎的話可以把它們都改成class。
             9
            10// 我們需要先聲明一下初始狀態(tài),這是因為我們要在定義狀態(tài)機時使用它
            11// 但又不得不在狀態(tài)機這后定義它。
            12
            13struct  Greeting;
            14
            15// Boost.Statechart大量應(yīng)用模板模式。
            16// 派生類必須將自己做為基類模板的第一個參數(shù)。
            17//
            18// 狀態(tài)機必須要知道當其初始化后進行的第一個狀態(tài)。
            19// 這就是為什么Greeting要做為每二個模板參數(shù)。
            20// (譯者注:也就是說Greeting狀態(tài)是Machine狀態(tài)機初始化后進入的第一個狀態(tài))
            21struct  Machine : sc::state_machine< Machine, Greeting > {};
            22
            23// 對于每一個狀態(tài),我們需要為其指明:它屬于哪一個狀態(tài)機,它位于狀態(tài)圖的哪個位置。
            24// 我們用simple_state<>的上下文參數(shù)就可以完成這些指定了。
            25// 對于我們目前的這個簡單的狀態(tài)機來說,上下文就是狀態(tài)機(Machine)
            26// 所以,Machine必須要做為simple_state的第二個模塊參數(shù)。
            27// (關(guān)于上下文參數(shù)的詳細解釋在下一個例子中有)
            28struct  Greeting : sc::simple_state< Greeting, Machine >
            29{
            30  // 一旦狀態(tài)機進行一個狀態(tài)的時候,它就要創(chuàng)建一個相應(yīng)狀態(tài)類的對象(類實例)
            31  // 只要狀態(tài)機保持在這個狀態(tài)下,這個對象就會一直存在。
            32  // 最后,當狀態(tài)機離開這個狀態(tài)時,對象被銷毀。
            33  // 所以,一個狀態(tài)的進入動作就是這個狀態(tài)類的構(gòu)造器,而它的退出動作則是它的析構(gòu)類。   Greeting() { std::cout <<  "Hello World!\n" ; }  // 進入
            34  ~Greeting() { std::cout <<  "Bye Bye World!\n" ; }  // 退出
            35}
            ;
            36
            37int  main()
            38{
            39  Machine myMachine;
            40  // 構(gòu)造完狀態(tài)機后,它并未開始運行。我們要通過調(diào)用它的initiate()來啟動它。
            41  // 同時,它也將觸發(fā)它的初始狀態(tài)(Greeting)的構(gòu)造。
            42  myMachine.initiate();
            43  // 當我們離開main()函數(shù)時,myMachine將被銷毀,這將導(dǎo)致它銷毀它內(nèi)部的所有活動的狀態(tài)類。
            44  // (譯者注:為什么會說所有?這是因為一個狀態(tài)機可以同時保持在多個狀態(tài)中,可以參考“高級主題”部分)
            45  return  0;
            46}
            這個程序會顯示“Hello World!”和“ Bye Bye World! ”,然后退出。
            posted on 2010-10-03 19:06 小王 閱讀(1804) 評論(0)  編輯 收藏 引用 所屬分類: Boost
            精品久久久久久无码人妻热| 色婷婷综合久久久中文字幕| 国产精品女同久久久久电影院| 久久免费视频6| 精品久久久久久国产免费了| 久久精品国产99国产精品| 久久亚洲国产精品五月天婷| 久久影视综合亚洲| 青青热久久国产久精品| 中文字幕无码久久精品青草 | 久久笫一福利免费导航 | 久久人做人爽一区二区三区| 精品久久久一二三区| 一本一道久久综合狠狠老| 蜜臀久久99精品久久久久久小说| 欧美黑人又粗又大久久久| 国产综合久久久久| 久久99国产一区二区三区| 区亚洲欧美一级久久精品亚洲精品成人网久久久久| 久久99精品国产99久久6| 亚洲精品无码久久久| 久久久噜噜噜久久中文福利| 久久久国产精品福利免费 | 国产精品99久久久久久猫咪| 久久丝袜精品中文字幕| 色综合久久久久无码专区| 久久精品国产福利国产秒| 色婷婷久久久SWAG精品| 人人狠狠综合久久88成人| 婷婷综合久久狠狠色99h| 伊人热热久久原色播放www| 99久久久精品| 免费精品国产日韩热久久| 久久免费高清视频| 偷窥少妇久久久久久久久| 一本久久a久久精品综合夜夜| 国内精品久久久久影院老司| 久久99国产精一区二区三区| 久久国产精品无| 成人午夜精品久久久久久久小说| 久久精品国产亚洲AV香蕉|