10.2 日付が有効か否かの判定 (グレゴリオ暦/ユリウス暦)
指定した日付が有効かどうかを判定する関数テンプレートです。元ネタとは異なり、std::tm 構造体の tm_mon に合わせて、月は 0~11 で指定するようにしています。あと、閏年用のテーブルも持たせることで、コードを単純化しました。
inline bool is_valid_day_helper(int year, int month, int day, bool leap)
{
static const char days_in_month[2][12] =
{
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
};
return value_in_range(0, month, 11)
&& (1 <= day && day <= days_in_month[leap][month]);
}
template<class Calender>
inline bool is_valid_day(int year, int month, int day, Calender calender)
{
return is_valid_day_helper(year, month, day, is_leapyear(year, calender));
}
メタ関数版も現在準備中です。もうしばらくお待ちください。
元ネタ
ブックナビゲーション
- 技術情報
- Boost C++ Libraries メモ
- C++と組込み環境
- C++サンプル集
- C++テンプレート集
- C++プログラマのためのC言語入門
- C/C++迷信集
- C99関数・マクロ・前処理スクリプト集
- C言語再入門
- C言語徹底入門
- Drupal メモ
- TOPPERS 情報
- ベターCとしてのC++
- マイコン メモ
- ライブラリ開発入門
- 分割コンパイルをきわめる
- 擬似プロセッサを作る
- 象の卵を探して...
- 車輪の再発明
- 過去の情報

