読者です 読者をやめる 読者になる 読者になる

とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

C標準ライブラリとBoostが出会ったら (2)

プログラム言語C C++ Boost

今回は前回の予告どおり,time_t を optional 化してみます。

// ライブラリ
#include<ctime>
#include<boost/optional/optional.hpp>

namespace sscrisk{

 boost::optional<std::time_t> time()
 {
  std::time_t const t = std::time(0);
  return t != static_cast<std::time_t>(-1)
   ? boost::make_optional(t)
   : boost::optional<std::time_t>();
 }

}


// クライアント
#include<iostream>
int main()
{
 if(boost::optional<time_t> const t = sscrisk::time())
  std::cout << std::ctime(&*t) << std::endl;
}

実行結果:

Fri Sep 24 20:06:04 2010

Boost.Optional のおかげで,クライアント側で time_t が -1 かどうかを確認する必要がなくなりました。また,if の中で宣言できるようになりコードがすっきりしました。