2009-06-18 12 views
6

HEJ、別の質問:ブースト:精神の再利用ルール

私は共通のルールの番号を使用する非常によく似たパーサの数を書かれています。これらのルールを複数のパーサーがアクセスできる場所に保存することはできますか?

rule<> nmeaStart = ch_p('$'); 
rule<> nmeaAddress = alnum_p() >> alnum_p() >> !alnum_p() >> !alnum_p(); 
rule<> nmeaDelim = ch_p(','); 
rule<> nmeaHead = nmeaStart >> nmeaAddress >> nmeaDelim; 
... 
/* other rules. Different for each parser*/ 
... 
rule<> nmeaChkSumStart = ch_p('*'); 
rule<> nmeaChkSum = int_parser<unsigned int,16,2,2>(); 
rule<> nmeaTail = nmeaChkSumStart >> nmeaChkSum >> eol_p; 

私は、好ましくは、いくつかのクラスの保護された静的変数に、共通の場所に... NMEAという名前のすべてのルールを入れたいと思います:それはどういうわけかこのようになります。私はスピリットの文法と呼ばれることが重要だと思いますが、正直なところ私はそれについてはあまり理解していません。

多くの感謝!乾杯!

答えて

2

これは通常の変数です。特別な操作は必要ありません。だからあなたのヘッダーの書き込みに:

class nmea { 
protected: 
    static rule<> start, address; 
}; 

そして、あなたの実装ファイル内:

rule<> nmea::start = ch_p('$'); 
rule<> nmea::address = ch_p('$'); 
// etc. 

が、私はあなたがメンバ変数を使用することをお勧めだと思います。