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

FizzBuzz

制御構文・論理演算を一切使わずに FizzBuzz - odz buffer
おぉ、なるほど。

一時オブジェクト作りまくりで書くとこんな感じ? template 勉強しないと。

#include "iostream"
#include "sstream"

using namespace std;

template <bool mod3, bool mod5, int i>
struct FizzBuzzString {
    string operator()() { stringstream ss; ss << i; return ss.str(); }
};

template <int i>
struct FizzBuzzString<true, false, i> {
    string operator()() { return "Fizz"; }
};

template <int i>
struct FizzBuzzString<false, true, i> {
    string operator()() { return "Buzz"; }
};

template <int i>
struct FizzBuzzString<true, true, i> {
    string operator()() { return "FizzBuzz"; }
};

template <int i>
inline string fizzbuzz() {
    return fizzbuzz<i - 1>() + FizzBuzzString<i % 3 == 0, i % 5 == 0, i>()() + ", ";
}

template <>
inline string fizzbuzz<0>() {
    return "";
}

int main(void) {
    cout << fizzbuzz<100>() << endl;

    return 0;
}