二項係数を計算するためのテンプレートが見つかりました。利点は、派生多項式(ちょうど5つの非常に単純なもの)を使用する代わりに、このテンプレートをコンパイル時のBernstein多項式生成に使用することです。バリデーションテンプレートを簡略化する:いくつかのスペシャライゼーションを削除する
私は当初、5つのランダム関数の生成が明らかになったので、これを行うことでコードがより簡単になると考えました。残念ながら、以下のコードはテンプレートに慣れていない人には読みにくいです。少なくともいくつかのテンプレートの特殊化を取り除く方法はありますか?あなたはおそらくconstexprの機能を使用する場合があります
// Template functions to estimate the binominal coefficient
template<uint8_t n, uint8_t k>
struct binomial {
static constexpr int value = (binomial<n - 1, k - 1>::value + binomial<n - 1, k>::value);
};
template<>
struct binomial<0, 0> {
static constexpr int value = 1;
};
template<uint8_t n>
struct binomial<n, 0> {
static constexpr int value = 1;
};
template<uint8_t n>
struct binomial<n, n> {
static constexpr int value = 1;
};
:ここC++ 11やさしいバージョンです。私はこのコードはまったく読みにくく、実際にはきれいだとは思わない。 –
Constexpr関数? – Quentin
もしあなたがテンプレートを保持したいと思うなら(いくつか示唆しているように、より読みやすいconstexpr関数には向かない)、私は 'binomial <0, 0>'が 'binomial'の特殊なケースだと信じています。したがって、特殊化の数を2に減らすことができます。 –