user-defined literals で多倍長整数型を定義

整数であれば、template で受け取ることが出来るので、ちょっと試してみました。
とりあえず、手頃な多倍長整数型がなかったので st::array へと変換しています。

[ソース]

#include <iostream>
#include <array>

template<typename Char>
constexpr int
ctoi(Char c){
    return c - Char('0');
}

template<char... cs>
constexpr std::array<char, sizeof...(cs)>
operator "" _bigint(){
    return {{ ctoi(cs)... }};
}

int
main(){
    auto num = 23198301028390120478137017397871037889071208037912879137927891_bigint;
    for(auto n : num){
        std::cout << int(n);
    }
    return 0;
}

[出力]

23198301028390120478137017397871037889071208037912879137927891

こんな感じ。
今ふと思ったけど、別に template じゃなくても、char const* で受け取って std::string を返すとかでもいいですね。
こういうのはありかなー?

[コンパイラ]

  • g++ (GCC) 4.7.0 20111029 (experimental)