2012-03-08 7 views
2

私は単純な正規表現の変換方法を使用して、std::stringとして渡されたHTMLに対してマイナーな処理を行っています。このメソッドは次のようになります。単純な変換ルーチンのインターフェイスを設計するにはどうすればよいですか?

std::string ParseQuotedPrintableHtml(std::string const& html); 

このメソッドは、私のコードベース全体で使用できる小さなライブラリに設計したいと考えています。単なる関数なので、単にユーティリティクラス(または名前空間)を作成してその中に関数を埋め込むように誘惑されるかもしれません。私はこれが少し素朴なデザインだと感じています。このような機能を集中してアクセス可能な場所に設計する方法についての経験則をお勧めしますか?

EDIT

私も、この関数の呼び出しは、いくつかの「ヘルパー」機能があることを言及する必要があります(私もこれらを作成したが、彼らは唯一の役に立つと、この方法で使用されています)。理想的にはこれらはクラス内では「プライベート」ですが、これをグローバル関数として保持すると、それらの実装メソッドもグローバル名前空間(またはそれらを配置する名前空間)にアクセスできます。

私はこれによると思いますが、多分ユーティリティクラスを作成するのがベストでしょうか?

class QuotedPrintableHtml 
{ 
    private: 
    void HelperMethod1() const; 
    void HelperMethod2() const; 

    std::string html_; 

    public: 
    QuotedPrintableHtml(std::string const& html) : html_(html) {} 
    std::string Parse() const; 
}; 

おそらくこのようなものでしょうか?

+2

私はそれが何の状態も持たず、ある抽象的なインターフェースに準拠する必要がないならば、それを単一の機能として保つ方がよいと言います。 –

+0

もし彼がそれをしたら、彼はユニットテストをしようとすると問題はないでしょうか?この関数は、テスト環境に存在しない可能性のあるhtmlファイルにアクセスしようとしますが、とにかく単体テストでファイルシステムにアクセスすべきではありません。私は解決策を提案するつもりですが、これも私が苦労しているものなので、まだ確定的な答えはありません。 –

+2

@Robert:無名の名前空間を使って、名前空間内の関数を "非公開"にすることができます。 –

答えて

3

クラスを作成することをお勧めしません。ユーティリティ関数はいくつかの状態を共有しないので、フリー関数を収集するためにUtilitiesのような名前空間を作成します。共有したくないヘルパー関数はすべて、cppファイル内の匿名の名前空間に入れることができます。

関連する問題