3

この質問は、テンプレートのメタプログラミング構造に焦点を当てています。私は、c++0x プロトタイプ コンパイラが指数関数的なコンパイル時間を線形コンパイル時間に変えることを示す証拠を提供する 2 つの記事 ( 12、2 は確かな証拠を示していませんが、主張を信頼しています) を見つけました。

auto 、 decltype 、および variadic テンプレートには、これを可能にする何かがあるという漠然とした考えがあります。私が見たいのは、言語への変更とこれを可能にするコンパイラ技術の根本的な説明、特にその方法と理由の説明です。

私のスキルレベルに関しては、Boost TMP ライブラリ精神を怒りで使用し、いくつかのおもちゃの MPL プログラムを使用しました。

4

1 に答える 1

3

最初のものは2番目のものよりもコンパイラの処理が遅いことは明らかであり、あなたが言うように、その証拠があります。

/* first */
template<typename A>
void f(A const&);
template<typename A>
void f(A&);

template<typename A1, typename A2>
void f(A1 const&, A2&);
template<typename A1, typename A2>
void f(A1&, A2 const&);
template<typename A1, typename A2>
void f(A1 const&, A2 const&);
template<typename A1, typename A2>
void f(A1&, A2&);

// ...

/* second */
template<typename ...T>
void f(T &&...);

autoC++で完全にジェネリックな回避策がないことを私は知っています。シミュレーションautoには、数千行ではないにしても数百行のコードが必要であり(boost.typeofを参照)、それでも一般的ではありません。についても同じですdecltype

于 2011-02-27T16:38:07.237 に答える