warn()
次のように、ファイルを開くことができない場合にエラー メッセージを出力するために、非標準関数 (BSD によって提供される) を使用しています。
std::string path = get_path() ;
std::ifstream file(path) ;
if (file.is_open()) { /* do something */ }
else {
warn("%s", path.c_str()) ;
// uses errno to figure out what the error was and outputs it nicely along with the filename
}
出力する場合はこれで十分ですが、文字列全体を印刷するだけでなく、別の場所で使用したい場合はどうすればよいでしょうか。関数にはwarn()
、エラーを文字列に書き込むフォームがないようです。私は自分自身を転がしてみましたが、比較すると非常に面倒に思えます(プログラムの名前を取得できないことに加えて):
this->foo((boost::format("%s: %s") % path % strerror(errno)).str()) ;
warn()
では、 の出力を文字列として取得するにはどうすればよいですか?