#include <windows.h>とインクルードしていると思いますが、この時
OutputDebugString(L"この文字列が出力される");
という関数でプログラムの実行中に下に表示される「出力」というウインドウに文字列を表示できます。(文字列の前につけているLはユニコード設定でのコンパイル用です。)
数字の出力
以下は、数字も出力できるようにテンプレート関数を定義して使う例です。(ブラウザによっては改行コードが文字化けしているかも知れません。また、意味もなく文字の色が変わっているかも知れません。)
#include <windows.h>
#include <sstream>
//引数一つ
template < typename T > void ods( T tep)
{
std::wstringstream ss;
std::wstring st;
ss << tep<< L"\n";
st = ss.str();
OutputDebugString(st.c_str());
};
//引数2つバージョン
template < typename T, typename T2 > void ods( T tep, T2 tep2)
{
std::wstringstream ss;
std::wstring st;
ss << tep << tep2<< L"\n";
st = ss.str();
OutputDebugString(st.c_str());
};
//引数3つバージョン(ただし型の種類は2つで交互に配置)
template < typename T, typename T2 > void ods( T tep, T2 tep2, T tep3)
{
std::wstringstream ss;
std::wstring st;
ss << tep << tep2<< tep3 << L"\n";
st = ss.str();
OutputDebugString(st.c_str());
};
int main()
{
int x = 3;
ods(L"x = ", x, L" センチメートル");
getchar();
return 0;
}
--------出力結果----------
x = 3 センチメートル
-------------------------
以上の例で定義したodsという名前の関数は内部でストリングストリームというクラスを使って数字を文字列に変換しているためsstreamというヘッダが必要に成ります。
ストリングストリームを継承してみた
#include <windows.h>
#include <sstream>
// デバッグウインドウへ文字列を出力する関数OutputDebug()があることと、その関数がデストラクタから呼ばれる事以外は
//wostringstreamと変わらないクラス
class DebugStringStream : public std::basic_ostringstream <wchar_t, std::char_traits<wchar_t> >
{
public:
//デストラクタによる自動出力
~DebugStringStream ()
{
OutputDebug();
}
//引数で改行量を指定して出力
void OutputDebug(int kaigyou = 1)
{
for(int i = 0; i < kaigyou; ++i)
{
*this << L"\n";
}
//大域空間のOutputDebugStringを呼ぶ
::OutputDebugString(this->str().c_str());
//一回呼ぶと内容はクリアされる
this->str(L"");
}
};
int main()
{
DebugStringStream dss;
dss << L"あ~テステス " << 180 <<L"度";
dss.OutputDebug(2);//これで出力
double pai = 3.14159265358979;
//doubleやfloatの精度を設定
dss.precision(15);
dss << L"円周率 = " << pai <<L"…";
//デストラクタが呼ばれても出力される
return 0;
}
//---出力結果----
あ~テステス 180度
円周率 = 3.14159265358979…
ーーーーーーーーー
こちらはIOストリームの整形機能が利用できるし、沢山の出力をしたい場合、速度面で有利です。
まぁ普通にストリングストリームを使うのとさほど違いはありません。
0 件のコメント:
コメントを投稿