私は C++ テンプレートを学習しており、いわゆるテンプレート トレイトを適用してデータ型を選択したいと考えています。オンラインでコードを見つけて、自分のケースで機能させる
#include <iostream>
using namespace std;
template <bool T> struct TM;
template <> struct TM<true> {typedef double MType;};
template <> struct TM<false> {typedef int MType;};
int main(int argc, char *argv[])
{
TM<true>::MType x;
TM<false>::MType y;
cout << sizeof(x) << endl;
cout << sizeof(y) << endl;
return 0;
}
それはかなりうまくいきます。ただし、これは変数ではなく定数ブール値に対してのみ機能するようであるため、次のコードは機能しません
#include <iostream>
using namespace std;
template <bool T> struct TM;
template <> struct TM<true> {typedef double MType;};
template <> struct TM<false> {typedef int MType;};
int main(int argc, char *argv[])
{
bool var=true;
TM<var>::MType w;
if (var) TM<true>::MType z;
else TM<false>::MType z;
cout << sizeof(w) << endl;
cout << sizeof(z) << endl;
return 0;
}
テンプレートの特性が実行時に定義された変数で機能しないというのは本当ですか? ありがとう