1. ホーム
  2. c++

[解決済み] テンプレート・パラメータとしてfloat値を使用できないのはなぜですか?

2022-06-26 02:05:08

質問

を使おうとすると float をテンプレート・パラメータとして使おうとすると、 コンパイラはこのコードを要求します、一方 int は問題なく動作します。

を使うことができないからでしょうか? float をテンプレートパラメータとして使用することができないためでしょうか?

#include<iostream>
using namespace std;

template <class T, T defaultValue>
class GenericClass
{
private:
    T value;
public:
    GenericClass()
    {
        value = defaultValue;
    }

    T returnVal()
    {
        return value;
    }
}; 


int main()
{
    GenericClass <int, 10> gcInteger;
    GenericClass < float, 4.6f> gcFlaot;

    cout << "\n sum of integer is "<<gcInteger.returnVal();
    cout << "\n sum of float is "<<gcFlaot.returnVal();

    return 0;       
}

エラーです。

main.cpp: In function `int main()':
main.cpp:25: error: `float' is not a valid type for a template constant parameter
main.cpp:25: error: invalid type in declaration before ';' token

main.cpp:28: error: request for member `returnVal' in `gcFlaot',
                    which is of non-class type `int'

私は ゲームプログラマのためのデータ構造」を読んでいます。 Ron Penton によるものです。 float を渡しますが、私がそれを試すと、コンパイルできないようです。

どのように解決するのですか?

現在の C++ 標準では float (すなわち実数) や文字列リテラルを テンプレート非型パラメータ . もちろん floatchar * を通常の引数として指定します。

おそらく著者は現在の標準に従わないコンパイラを使用しているのでは?