私は、という機能を持つプロジェクトの開発に携わっています。11/14(大学の私の科目の1つ)。 このようなトピックについては、いくつかの既存のソースや同様のプレゼンテーションがあり、私が完全に理解できなかったいくつかのコードスニペットが含まれています(そして何らかの形で関数型プログラミングに接続できる)。スニペットとBは遅延評価に属しC再帰とに属し。私は以下のあなたとそれらを共有したいと思います:C++の機能プログラミングコードスニペット
スニペットA:
#include <iostream>
template <int N>
struct Factorial {
static int const val = N * Factorial<N - 1>::val;
};
template <>
struct Factorial <0> {
static int const val = 1;
};
int main() {
int factorial_of_6 = Factorial<6>::val;
std::cout << factorial_of_6 << std::endl;
return 0;
}
(順番に実行時の計算を回避し、パフォーマンスを向上させるために)ここでのポイントは、時間の評価をコンパイルしましたか? 他にも利点はありますか?
スニペットB:
#include <iostream>
template <int ...>
struct my_sum;
template <>
struct my_sum <> {
static const int value {0};
};
template <int i, int ... tail>
struct my_sum <i, tail ...> {
static const int value = i + my_sum<tail ...>::value;
};
int main() {
int sum {my_sum<1, 2, 3, 4, 5>::value};
std::cout << sum << std::endl;
return 0;
}
同じ質問は、上記のように適用されます。
スニペットC:ここ
そして多分似ている別のスニペットです
#include <iostream>
template <typename... Args>
void some_function (Args ...) {
std::cout << sizeof...(Args) << std::endl;
}
int main() {
some_function ("Every little thing gonna be alright...", 1.0/0.0);
return 0;
}
"のプレゼンテーションは言った:C++のが熱望しているが、次のように動作します。" 与えられた表現を気にするまで、私はそれらの量を知ることができるというのは、その点ですか?
できるだけ具体的で詳細にご記入ください。ご理解とご協力のほどよろしくお願いいたします。 :)
Cの場合、argsは遅延評価されません。評価されます(* as-if *ルールで最適化され、それらを破棄する可能性があります)。 – Jarod42