C ++-関数テンプレートの特殊化が呼び出されていない

マットどっち

私は次のコードを持っています:

template<typename T>
bool validate(const T& minimum, const T& maximum, const T& testValue)
{
    return testValue >= minimum && testValue <= maximum;
}

template<>
bool validate<const char&>(const char& minimum, const char& maximum, const char& testValue)
{
    // Allows comparisons with char arguments, ignoring case    
    // Localize by calling previously defined function
    return validate(toupper(minimum), toupper(maximum), toupper(testValue));
}

最初のテンプレートは入力されたタイプに使用され、特殊化はリテラル文字用です。コードはコンパイルされ、main.cppで実行されてテストされますが、テストした後、特殊化が呼び出されていないことがわかりました。メインテンプレートを呼び出します。理由がわかりません。

Piotr Skotnicki

template <> bool validate<const char&>型テンプレートパラメータ際分業は、コンパイラによって捕捉されるT主なテンプレートからは推測またはであることを明示的に指定されていますconst char&呼び出しのvalidate('a', 'b', 'c')場合、Tはであると推定されchar、これはスペシャライゼーションが期待するものと一致しません。

特殊化を提供するchar(つまり、ではないconst char&):

template <>
bool validate<char>(const char& minimum, const char& maximum, const char& testValue)
{
    return validate(toupper(minimum), toupper(maximum), toupper(testValue));
}

または、オーバーロードを非テンプレートとして定義します。

bool validate(char minimum, char maximum, char testValue)
{
    return validate(toupper(minimum), toupper(maximum), toupper(testValue));
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

SFINAEを使用したC ++ 11テンプレート関数の特殊化により、さらに特殊化できます(エラー:オーバーロードされた関数の呼び出しがあいまいです)

分類Dev

C ++テンプレート:特殊な関数が呼び出されないのはなぜですか?

分類Dev

c ++ 14テンプレートの特殊化「使用されているが定義されていない」

分類Dev

関数テンプレートc ++の明示的な特殊化

分類Dev

C ++ 11は、同じテンプレート関数のさまざまな特殊化を呼び出すテンプレート関数の構文を単純化します

分類Dev

C ++テンプレートの部分的な特殊化-unique_ptr <t>で最も特殊化されています

分類Dev

C ++が完全な特殊化によってマスクされている基本テンプレート関数をインスタンス化するのはなぜですか?

分類Dev

C ++では、テンプレート関数が部分的な特殊化を持てないのはなぜですか?

分類Dev

C ++テンプレートの特殊化と定数を理解していない

分類Dev

C ++:配列の関数テンプレートの特殊化

分類Dev

特殊化されていないテンプレートタイプオブジェクトのC ++リスト?

分類Dev

C ++のクラステンプレートに、特殊化されていない共通の静的メンバーを含めることは可能ですか?

分類Dev

C ++テンプレートでメンバー関数を部分的に特殊化できないのはなぜですか

分類Dev

c ++テンプレートとオーバーロードされた関数へのあいまいな呼び出し

分類Dev

C ++テンプレートとあいまいな関数呼び出し

分類Dev

C ++テンプレート特殊化メンバー関数の定義

分類Dev

sizeof(type)==定数を比較するとC ++テンプレートの特殊化が機能しない

分類Dev

配列を受け入れるC ++テンプレートが、ポインター(bis)を受け入れる1つよりも特殊化されていないのはなぜですか?

分類Dev

C ++テンプレートの特殊化と関数の戻り値

分類Dev

C ++テンプレートの特殊化と関数の戻り値

分類Dev

将来の特殊化のために、C ++テンプレート関数を戻り値の型に依存しないようにする方法

分類Dev

C ++テンプレートの特殊化/部分的および完全

分類Dev

C ++テンプレートの特殊化char *およびValgrind

分類Dev

インスタンス化されていないC ++テンプレート関数の意味的正確性

分類Dev

C ++部分的なテンプレートの特殊化の混乱

分類Dev

C ++-可変個引数テンプレートの部分的な特殊化

分類Dev

NodeJSネスト関数のC ++アドオンが呼び出されていない

分類Dev

C ++テンプレートの部分的な特殊化

分類Dev

C ++ operator()で呼び出しテンプレートを特殊化する方法は?

Related 関連記事

  1. 1

    SFINAEを使用したC ++ 11テンプレート関数の特殊化により、さらに特殊化できます(エラー:オーバーロードされた関数の呼び出しがあいまいです)

  2. 2

    C ++テンプレート:特殊な関数が呼び出されないのはなぜですか?

  3. 3

    c ++ 14テンプレートの特殊化「使用されているが定義されていない」

  4. 4

    関数テンプレートc ++の明示的な特殊化

  5. 5

    C ++ 11は、同じテンプレート関数のさまざまな特殊化を呼び出すテンプレート関数の構文を単純化します

  6. 6

    C ++テンプレートの部分的な特殊化-unique_ptr <t>で最も特殊化されています

  7. 7

    C ++が完全な特殊化によってマスクされている基本テンプレート関数をインスタンス化するのはなぜですか?

  8. 8

    C ++では、テンプレート関数が部分的な特殊化を持てないのはなぜですか?

  9. 9

    C ++テンプレートの特殊化と定数を理解していない

  10. 10

    C ++:配列の関数テンプレートの特殊化

  11. 11

    特殊化されていないテンプレートタイプオブジェクトのC ++リスト?

  12. 12

    C ++のクラステンプレートに、特殊化されていない共通の静的メンバーを含めることは可能ですか?

  13. 13

    C ++テンプレートでメンバー関数を部分的に特殊化できないのはなぜですか

  14. 14

    c ++テンプレートとオーバーロードされた関数へのあいまいな呼び出し

  15. 15

    C ++テンプレートとあいまいな関数呼び出し

  16. 16

    C ++テンプレート特殊化メンバー関数の定義

  17. 17

    sizeof(type)==定数を比較するとC ++テンプレートの特殊化が機能しない

  18. 18

    配列を受け入れるC ++テンプレートが、ポインター(bis)を受け入れる1つよりも特殊化されていないのはなぜですか?

  19. 19

    C ++テンプレートの特殊化と関数の戻り値

  20. 20

    C ++テンプレートの特殊化と関数の戻り値

  21. 21

    将来の特殊化のために、C ++テンプレート関数を戻り値の型に依存しないようにする方法

  22. 22

    C ++テンプレートの特殊化/部分的および完全

  23. 23

    C ++テンプレートの特殊化char *およびValgrind

  24. 24

    インスタンス化されていないC ++テンプレート関数の意味的正確性

  25. 25

    C ++部分的なテンプレートの特殊化の混乱

  26. 26

    C ++-可変個引数テンプレートの部分的な特殊化

  27. 27

    NodeJSネスト関数のC ++アドオンが呼び出されていない

  28. 28

    C ++テンプレートの部分的な特殊化

  29. 29

    C ++ operator()で呼び出しテンプレートを特殊化する方法は?

ホットタグ

アーカイブ