C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でのテンプレートメタプログラミング


テンプレートを使用してコンパイル時に計算を行うプログラムを作成する場合、これはテンプレートメタプログラミングと呼ばれます。

サンプルコード

#include <iostream>
using namespace std;

template<int n>struct power {
   enum { value = 4*power<n-1>::value };
};

template<>struct power<0> {
   enum { value = 1 };
};

int main() {
   cout <<”power is:”<< power<7>::value << endl;
   return 0;
}

出力

power is:16384

上記の例では、コンパイラがpower <7> ::valueを検出すると、パラメータが7のpowerのインスタンスを作成しようとします。これは、列挙定数値をコンパイル時に評価する必要があるため、power<6>も作成する必要があることがわかります。 。 power <6>の場合、コンパイラにはpower<5>などが必要です。最後に、コンパイラはfunStruct <1> ::valueを使用し、コンパイル時の再帰が終了します。これはテンプレートメタプログラミングと呼ばれます。


  1. C ++のexpm1()

    関数expm1()は、任意の数から1を引いた累乗の指数を計算するために使用されます。 (指数をaの累乗で累乗した)-1の値を返します。 expm1()の数式は次のとおりです。 expm1(a) = (e^a) - 1 C ++言語でのexpm1()の構文は次のとおりです。 float expm1(variable_name); ここで 変数名 −値が計算される変数に付けられた任意の名前。 これは、C ++言語でのexpm1()の例です。 例 #include <iostream> #include <cmath> using namespace std

  2. C ++のlog1p()

    関数log1p()は、(a + 1)の自然対数(基数e対数)を計算するために使用されます。ここで、aは任意の数値です。 (a + 1)の自然対数の値を返します。 -1未満の値を渡すと、Not a number(Nan)が返されます。 log1p()の数式は次のとおりです。 log1p(a) = base-e log(a+1) C ++言語でのlog1p()の構文は次のとおりです。 float log1p(float variable_name); ここで variable_name −対数値が計算される変数に付けられた名前。 これは、C ++言語でのlog1p()の例です