3

重複の可能性:
C ++:テンプレートパラメーターとしてfloat値を使用できないのはなぜですか?

私はこのクラスを持っています:

template<typename ValueType, ValueType DefaultValue>
class SomeClass
{
    public:
        SomeClass() : m_value(DefaultValue){}

        ValueType m_value;
};

私はそれをこのように使いたい:

SomeClass<int, 1> intObj; //ok
SomeClass<float, 1.f> floatObj; //error: 'float' : illegal type for non-type template parameter 'DefaultValue'

使用時にこのエラーが発生する理由を教えてくださいfloat

RGBA色を表現し、さまざまな色表現(たとえば白)のデフォルト値でチャネルを初期化するために、同様のものを使用したいと思います。

4

5 に答える 5

3

この言語では、浮動小数点型を非型テンプレート引数として使用することはできません。詳細については、「float値をテンプレートパラメータとして使用できないのはなぜですか?」を参照してください。

于 2013-01-10T20:11:45.283 に答える
3

§14.1/7(C ++ 11 N3485)は、これを明示的に禁止しています。

非型テンプレートパラメータは、浮動小数点、クラス、またはvoid型を持つように宣言してはなりません。[ 例:

template<double d> class X; // error  
template<double* pd> class Y; // OK  
template<double& rd> class Z; // OK
于 2013-01-10T20:12:07.293 に答える
0

残念ながら、C++は浮動小数点の非型テンプレートパラメータをサポートしていません。

于 2013-01-10T20:11:37.693 に答える
0

非型テンプレートパラメータを型にすることはできないため、このエラーが発生しますfloat。それらは、積分列挙メンバーポインタ、またはアドレスのみである可能性があります。

于 2013-01-10T20:11:39.977 に答える
0

簡単です。型以外のテンプレートパラメータは、整数型またはポインタ型のコンパイル時定数である必要があります。つまり、bool、enums、pointers、pointer-to-members、long、int、short、charです。現在の標準では、浮動小数点パラメーターは許可されていません。

于 2013-01-10T20:12:54.157 に答える