エイリアスになっています。HaskellC++の標準には多倍長整数ライブラリがありません。これは大変なことだと思います。標準の多倍長整数がないなら他言語の標準から持ってくればいいということで、HaskellのIntegerをラップしてC++の多倍長整数クラスにしてみました。Integerを扱う関数をFFIでエクスポートします。Integerを使います。これはIntegerオブジェクトを指すポインタで、GCに回収・再配置されない保証があります。fromIntegral、(*)、showをエクスポートしました(今回は乗法と出力がしたいので)。IntegerとCStringの解放関数も一緒にエクスポートしておきます。()コンパイルしてHsInteger_stub.hとHsInteger_stub.oを作ります。HsInteger.hsC++側ではこれらの関数をラップしてhs_integerクラスに収めます。ptr;};#endifでは使ってみましょう。100!を計算し出力するプログラムです。GHCランタイムシステムの初期化と終了を忘れないように。std::endl;}コンパイルにはg++を、リンクはghcを使うのが楽です。./hs_integer_example100!=9332621544...うまく動いています。こんな感じで完全な多倍長整数クラスを作れると思います。ネタなのでパフォーマンスとかは知りません。おまけついでにPythonでもやってみました。./py_integer_example100!=9332621544...boost::python::objectが優秀なので、これを軽く包むだけで実装できてしまいます。operator*=がオーバーロードされているあたりがすごい。ここまで優秀だとboost::python::objectを直接使えばいい感じですが、せっかくC++なのでラップして型安全度を上げた、ということにしておきます。Boostコードだけ貼って全く説明しないのもアレかと思うので、汎用性のある手法をいくつか抜き出してみました。使えない理由がある、なんてときに。サポートされていない環境ではそれをエミュレートし、サポートされていればそのまま使ってくれるという優れもののライブラリ。使い方の詳細はリファレンス参照。デリータは常に明示する必要があります。渡したとき、それぞれどのコンストラクタが呼ばれるかという問題。受けると型が完全にマッチしてしまうため、思いもかけないオーバーロード解決が起こるという例です。初期化するコンストラクタ。避けるという考え方もあります。初期化するコンストラクタ。