C++でテンプレート特殊化を使ってコンパイル時FizzBuzz
※ブログ移動のため、再掲載
コンパイルが終わらないコード
なんとなく原因は分かる…。
#include <iostream> template<int i, bool j = i % 3, bool k = i % 5> struct Hoge { }; template<int i> struct Hoge<i, true, true> { void operator()()const { std::cout << i << std::endl; } }; template<int i> struct Hoge<i, false, true> { void operator()()const { std::cout << "Fizz" << std::endl; } }; template<int i> struct Hoge<i, true, false> { void operator()()const { std::cout << "Buzz" << std::endl; } }; template<int i> struct Hoge<i, false, false> { void operator()()const { std::cout << "FizzBuzz" << std::endl; } }; template<int Head, int Tail> struct FizzBuzz { enum { Next = Head+1 }; void operator()()const { Hoge<Head>()(); if (Head < Tail) { FizzBuzz<Next, Tail>()(); } } }; int main() { FizzBuzz<1, 10>()(); return 0; }
コンパイルが終わるコード
#include <iostream> template<int i, bool j = i % 3, bool k = i % 5> struct Hoge { }; template<int i> struct Hoge<i, true, true> { void operator()()const { std::cout << i << std::endl; } }; template<int i> struct Hoge<i, false, true> { void operator()()const { std::cout << "Fizz" << std::endl; } }; template<int i> struct Hoge<i, true, false> { void operator()()const { std::cout << "Buzz" << std::endl; } }; template<int i> struct Hoge<i, false, false> { void operator()()const { std::cout << "FizzBuzz" << std::endl; } }; template<int Head, int Tail, bool IsLoop = true> struct FizzBuzz; template<int Head, int Tail> struct FizzBuzz<Head, Tail, true> { enum { Next = Head + 1 }; void operator()()const { Hoge<Head>()(); FizzBuzz<Next, Tail, (Next<Tail)>()(); } }; template<int Head, int Tail> struct FizzBuzz<Head, Tail, false> { void operator()()const { Hoge<Head>()(); } }; int main() { FizzBuzz<1, 30>()(); return 0; }
なんとなく始めたら一時間経ってた…
コンパイル終わるコード、もう少し良いやり方あると思う…。
- 作者: 高橋麻奈
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2012/08/31
- メディア: 単行本
- 購入: 1人 クリック: 1回
- この商品を含むブログ (5件) を見る
- 作者: ハーバート・シルト
- 出版社/メーカー: 翔泳社
- 発売日: 2015/11/25
- メディア: Kindle版
- この商品を含むブログを見る
Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)
- 作者: スコットメイヤーズ,小林健一郎
- 出版社/メーカー: 丸善出版
- 発売日: 2014/03/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (4件) を見る
- 作者: επιστημη,高橋晶
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2014/04/16
- メディア: 単行本
- この商品を含むブログ (6件) を見る