2017-05-17 9 views
2

ローディングバーを表示するのに、progress_displayを使用する関数があります。私はテストのために出力を無効にできるようにしたいと思います。ローディングバーは、初期化された2番目の行を表示し、if文で初期化すると、別のif文から++loading_bar;を呼び出す際にエラーが発生します。ブーストから `progress_display`の出力を無効にする

何もしない自分のストリームで初期化して無効にできるかどうか疑問に思っていましたが、どうすればこのようにするのか分かりません。

#include <boost/progress.hpp> 
int myfuntion(bool silent) 
{ 
    int computations = 100; 
    boost::progress_display loading_bar(computations); 
    ++loading_bar; 
} 
+1

私見:あなたはprogress_displayなどを宣言した場合

struct Output : std::ostream, std::streambuf { Output(bool enabled) : std::ostream(this), m_enabled(enabled) {} int overflow(int c) { if(m_enabled) std::cout.put(c); return 0; } bool m_enabled; }; 

さて、このstructは有効/そのコンストラクタからの出力を無効にすることができます。 org/wiki/Dependency_injection)を参照してください。つまり、いくつかの進行ログインターフェイス(1つはダミー、もう1つは 'boost :: progress_display'を使用)の2つの実装を持ち、適切なものをパラメータとして渡します。 –

答えて

1

後でそれを変更することはできませんので、あなたは、コンストラクタでstd::ostreamから派生したオブジェクトとprogress_display店舗の参照を渡す必要があります。

あなたが言うように、あなたは出力を制御し、独自のオブジェクトを作成することができ、それが遵守しなければなりません:

  • をそれはstd::ostreamから派生しなければなりません。
  • この時間は、progress_displayと同じでなければなりません。

std::ostreamの派生についてもっと詳しくはhereがあります。このリンクに基づいて、次のように定義することができます。struct; //en.wikipedia:これは[依存性注入](HTTPSを求めて

// Visible progress 
Output out_enabled(true); 
boost::progress_display loading_bar_visible(computations, out_enabled); 

// Invisible progress 
Output out_disabled(false); 
boost::progress_display loading_bar_invisible(computations, out_disabled); 
関連する問題