可変長テンプレート引数とboost::formatでprintf

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

可変長テンプレート引数とboost::formatでprintf

投稿記事 by h2so5 » 13年前

テンプレートでboost::formatをラップしてみた

CODE:

#include
#include
#include

namaspace {
	template
	void printf_format(FormatType format)
	{
	    std::cout 
	void printf_format(FormatType format, First first)
	{
	    printf_format(format % first);
	}

	template
	void printf_format(FormatType format, First first, Rest... rest)
	{
	    printf_format(format % first, rest...);
	}
}

template
void printf(const std::string& format, Params... params) {
	 printf_format(boost::format(format), params...);
}
C言語のprintfと同じように使えますが、引数が間違っていると例外を投げてくれます。

7/23 ちょっと修正しました。
7/24 さらに修正しました。
最後に編集したユーザー h2so5 on 2012年7月24日(火) 14:19 [ 編集 2 回目 ]

naohiro19
記事: 256
登録日時: 14年前

Re: 可変長テンプレート引数とboost::formatでprintf

投稿記事 by naohiro19 » 13年前

使い方はどうすればいいんでしょうか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 可変長テンプレート引数とboost::formatでprintf

投稿記事 by h2so5 » 13年前

ヘッダをインクルードしてprintfと同じように使うだけです。
もとのprintfと衝突するので名前空間を変える必要があるかもしれないです。

アバター
tk-xleader
記事: 158
登録日時: 14年前

Re: 可変長テンプレート引数とboost::formatでprintf

投稿記事 by tk-xleader » 13年前

わざわざ cout << format.str() なんてしなくても、boost::format自体がcoutに対する出力演算子を実装しているので、strメンバを呼び出さなくても問題は無いはずです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 可変長テンプレート引数とboost::formatでprintf

投稿記事 by h2so5 » 13年前

tkmakwins15 さんが書きました:わざわざ cout << format.str() なんてしなくても、boost::format自体がcoutに対する出力演算子を実装しているので、strメンバを呼び出さなくても問題は無いはずです。
指摘ありがとうございます。修正しました。