階乗関数のルックアップテーブルとして使用するboost::mpl::vector
を生成するコードを書きました。これは、開発者がルックアップを生成するためのより一般的なライブラリ関数のテストですテーブルを、基本配列の静的配列の形で格納します。関数(プリプロセッサマクロ定義として実装される可能性が最も高い)は、初期化される配列の名前とサイズ、各要素を初期化するためのメタ関数として使用されるクラステンプレートの名前を受け入れます。i配列。MPLベクトルを静的配列に変換する
私は、外部スクリプトを使用せずにこれを行うことについて移動する最良の方法は、以下のリストのコードで行われているように、boost::mpl::vector
を作成し、の戻り値をプッシュし
- になるだろうと思いました配列の各要素のベクトルの後部へのユーザ提供のメタ機能。
- ベクトルの要素を使用して、静的配列を初期化します(一連のマクロを使用して、最後には
__VARARGS__
マクロを使用します)。
私はどのように達成するのか(2)、また私が説明した手順が私が求めるものを行う良い方法ではないことを知っています。以下は、私が回答を希望する質問です:
- 私の手続きは、私が求めるものを達成する良い方法ですか?そうでない場合は、外部スクリプトを使用せずに、同じことを達成するより良い手順を記述してください。
私の手続きが確かに私が求めるものを達成するための良い方法であれば、どうすれば実装できますか(2)?
私は一度実装すると、私が記述するライブラリ関数を含むソースファイルへのリンクを必ず投稿します。コードリストは以下の通りです。
名前空間mpl = boost :: mpl;約束としてここ
template <typename x> struct factorial: mpl::if_<mpl::greater<x, mpl::int_<1>>, mpl::multiplies<x, factorial<x::prior>>, mpl::int_<1> >::type {}; template <typename sequence, typename size> struct compileTable: mpl::if_<mpl::greater<size, mpl::int_<0>>, compileTable< mpl::push_front<sequence, factorial<size>>::type, size::prior >, sequence >::type {}; static const int TABLE_SIZE = 13; typedef compileTable< mpl::vector<>, mpl::int_<TABLE_SIZE> >::type factorialTable; /* ** This is where I am stuck; how would I use the elements ** of factorialTable to initialize a static array? */
使用http://www.boost.org/doc/libs/1_45_0/libs/mpl/doc/refmanual/for-each.html – Anycorn
ここで私はちょっと混乱しています。これはそれぞれがランタイムアルゴリズムなので、静的配列を初期化するためにどのように使用しますか? –
静的配列とはどういう意味ですか? 'static int foo []'? – Anycorn