RosettaCodeData/Task/FizzBuzz/C++/fizzbuzz-5.cpp

49 lines
780 B
C++
Raw Permalink Normal View History

2013-06-05 21:47:54 +00:00
#include <iostream>
2015-02-20 00:35:01 -05:00
template <int n, int m3, int m5>
struct fizzbuzz : fizzbuzz<n-1, (n-1)%3, (n-1)%5>
2013-06-05 21:47:54 +00:00
{
2015-02-20 00:35:01 -05:00
fizzbuzz()
{ std::cout << n << std::endl; }
2013-06-05 21:47:54 +00:00
};
2015-02-20 00:35:01 -05:00
template <int n>
struct fizzbuzz<n, 0, 0> : fizzbuzz<n-1, (n-1)%3, (n-1)%5>
2013-06-05 21:47:54 +00:00
{
2015-02-20 00:35:01 -05:00
fizzbuzz()
{ std::cout << "FizzBuzz" << std::endl; }
2013-06-05 21:47:54 +00:00
};
2015-02-20 00:35:01 -05:00
template <int n, int p>
struct fizzbuzz<n, 0, p> : fizzbuzz<n-1, (n-1)%3, (n-1)%5>
2013-06-05 21:47:54 +00:00
{
2015-02-20 00:35:01 -05:00
fizzbuzz()
{ std::cout << "Fizz" << std::endl; }
2013-06-05 21:47:54 +00:00
};
2015-02-20 00:35:01 -05:00
template <int n, int p>
struct fizzbuzz<n, p, 0> : fizzbuzz<n-1, (n-1)%3, (n-1)%5>
2013-06-05 21:47:54 +00:00
{
2015-02-20 00:35:01 -05:00
fizzbuzz()
{ std::cout << "Buzz" << std::endl; }
2013-06-05 21:47:54 +00:00
};
2015-02-20 00:35:01 -05:00
template <>
struct fizzbuzz<0,0,0>
2013-06-05 21:47:54 +00:00
{
2015-02-20 00:35:01 -05:00
fizzbuzz()
{ std::cout << 0 << std::endl; }
2013-06-05 21:47:54 +00:00
};
2015-02-20 00:35:01 -05:00
template <int n>
struct fb_run
2013-06-05 21:47:54 +00:00
{
2015-02-20 00:35:01 -05:00
fizzbuzz<n, n%3, n%5> fb;
2013-06-05 21:47:54 +00:00
};
2015-02-20 00:35:01 -05:00
int main()
2013-06-05 21:47:54 +00:00
{
2015-02-20 00:35:01 -05:00
fb_run<100> fb;
return 0;
2013-06-05 21:47:54 +00:00
}