« Filter::SQL を使って掲示板を書いてみました | メイン | C++ テンプレートを使って高速な高機能サーバを書く方法 »

2008年04月17日

C++ テンプレートで(いまさら)FizzBuzz

re C++テンプレートでFizzBuzz - おびなたのはてな日記

 C++ テンプレートで if を定義しているのは面白いと思いましたが、一方で FizzBuzz を実現するためのコードとして見た場合は冗長じゃないかと思ったので、自分でも書いてみました。こんな感じ。

#include <iostream>

using namespace std;

template<int N, int Mod3=N%3, int Mod5=N%5> struct Print {
  Print() {
    cout << N << endl;
  }
};

template<int N> struct Print<N, 0, 0> {
  Print() {
    cout << "FizzBuzz" << endl;
  }
};

template<int N, int Mod5> struct Print<N, 0, Mod5> {
  Print() {
    cout << "Fizz" << endl;
  }
};

template<int N, int Mod3> struct Print <N, Mod3, 0> {
  Print() {
    cout << "Buzz" << endl;
  }
};

template<int N> struct FizzBuzz {
  FizzBuzz() {
    FizzBuzz<N-1>();
    Print<N>();
  }
};

template<> struct FizzBuzz<0> {
  FizzBuzz() {}
};

int main()
{
  FizzBuzz<100>();
}

投稿者 kazuho : 2008年04月17日 18:55 このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

トラックバック

このエントリーのトラックバックURL:
http://labs.cybozu.co.jp/cgi-bin/mt-admin/mt-tbp.cgi/1863