追加のテンプレートパラメータを必要とするタイプの関数の部分的なテンプレートの特殊化

ハッセデフ

内部に配列を含む型があります。タイプがAでない場合は、Aまたは1の配列メンバーの数を返す関数が必要です。

コードは次のとおりです。

#include <cstdio>
template<typename T, unsigned n>
struct A
{
    T values[n];
};
template<typename T>
unsigned count_components()
{
    return 1;//all types except 'A' should have 1 component
}
template<typename T, unsigned n>
unsigned count_components<A<T, n> >()//specialize count_components for 'A'
{
    return n;
}

int main()
{
    printf("%d\n", count_components<A<float, 4> >());//should be 4
    printf("%d\n", count_components<float>());//should be 1
    return 0;
}

G ++エラー:

test.cpp:13:37: error: function template partial specialization ”count_components<A<T, n> >” is not allowed
unsigned count_components<A<T, n> >()//specialize count_components for 'A'
                                    ^
Johannes Schaub-litb

私が関数を持っているとき、私は関数を使い続けることを好みます(あなたはまだアクセスできるので、これはメンバー関数でより有益です*this)。

template<typename T, unsigned n>
unsigned count_components_switch(boost::mpl::identity<A<T, n>>)
{
    return n;
}

template<typename T>
unsigned count_components_switch(boost::mpl::identity<T>)
{
    return 1;
}

template<typename T>
unsigned count_components()
{
    return (count_components_switch)(boost::mpl::identity<T>());
}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

関数へのテンプレートポインタの部分的なテンプレートの特殊化

分類Dev

複数のパラメーターに対するC ++部分クラステンプレートの特殊化

分類Dev

非型パラメーターを使用した部分的なテンプレートの特殊化:GCCとMSVS

分類Dev

std :: if_enabled_tパラメーターを使用したテンプレート関数の完全な特殊化

分類Dev

テンプレート関数のタイプ特性に依存する特殊化

分類Dev

テンプレートの特殊化にタイプを追加する

分類Dev

テンプレート引数のタイプを制限するためのクラスの可変個引数テンプレート部分特殊化

分類Dev

テンプレートの特殊化:Tとは異なるパラメーターを持つメンバー関数

分類Dev

異なるメンバーへのポインターの引数を持つ非型テンプレートパラメーターに対する特殊化は、一意の特殊化であることが保証されていますか?

分類Dev

より多くのテンプレートパラメータを使用した部分的な特殊化

分類Dev

型特性を使用して文字列イテレータのテンプレート関数を特殊化する

分類Dev

パラメータ化と「関数テンプレートの部分的な特殊化は許可されていません」

分類Dev

テンプレートの特殊化と関数ポインタ

分類Dev

関数テンプレート(クラステンプレートのメンバー)を明示的に特殊化すると、「部分的な特殊化は許可されていません」というエラーが発生します。なぜですか?

分類Dev

特定のタイプのテンプレート関数の特殊化

分類Dev

関数テンプレートの特殊化-エラー-ISOC ++は、型のない「パラメーター」の宣言を禁止します

分類Dev

他のパラメーターが続く可変個引数テンプレートパラメーターによる部分的な特殊化

分類Dev

C ++ 11での複数のテンプレートパラメータを使用したテンプレート関数の特殊化

分類Dev

テンプレートの特殊化で非型テンプレートテンプレートパラメータを使用する

分類Dev

部分的なテンプレートメンバーの特殊化

分類Dev

クラスと関数テンプレートの特殊化

分類Dev

STLコンテナであるテンプレートパラメータに基づいて、選択したメンバー関数の部分的な特殊化をシミュレートするにはどうすればよいですか?

分類Dev

複数のタイプのクラステンプレートの特殊化

分類Dev

特定のタイプのテンプレートクラスメソッドを特殊化する方法は?

分類Dev

部分的なテンプレートの特殊化エラー

分類Dev

テンプレートの特殊化におけるデフォルトの引数パラメータ

分類Dev

c ++テンプレート特殊化パラメーターの複製

分類Dev

任意の特殊化タイプの別のテンプレートによるテンプレートパラメータの制約

分類Dev

依存型による非型テンプレートパラメーターを使用した単一型テンプレートパラメータークラステンプレートの部分的な特殊化

Related 関連記事

  1. 1

    関数へのテンプレートポインタの部分的なテンプレートの特殊化

  2. 2

    複数のパラメーターに対するC ++部分クラステンプレートの特殊化

  3. 3

    非型パラメーターを使用した部分的なテンプレートの特殊化:GCCとMSVS

  4. 4

    std :: if_enabled_tパラメーターを使用したテンプレート関数の完全な特殊化

  5. 5

    テンプレート関数のタイプ特性に依存する特殊化

  6. 6

    テンプレートの特殊化にタイプを追加する

  7. 7

    テンプレート引数のタイプを制限するためのクラスの可変個引数テンプレート部分特殊化

  8. 8

    テンプレートの特殊化:Tとは異なるパラメーターを持つメンバー関数

  9. 9

    異なるメンバーへのポインターの引数を持つ非型テンプレートパラメーターに対する特殊化は、一意の特殊化であることが保証されていますか?

  10. 10

    より多くのテンプレートパラメータを使用した部分的な特殊化

  11. 11

    型特性を使用して文字列イテレータのテンプレート関数を特殊化する

  12. 12

    パラメータ化と「関数テンプレートの部分的な特殊化は許可されていません」

  13. 13

    テンプレートの特殊化と関数ポインタ

  14. 14

    関数テンプレート(クラステンプレートのメンバー)を明示的に特殊化すると、「部分的な特殊化は許可されていません」というエラーが発生します。なぜですか?

  15. 15

    特定のタイプのテンプレート関数の特殊化

  16. 16

    関数テンプレートの特殊化-エラー-ISOC ++は、型のない「パラメーター」の宣言を禁止します

  17. 17

    他のパラメーターが続く可変個引数テンプレートパラメーターによる部分的な特殊化

  18. 18

    C ++ 11での複数のテンプレートパラメータを使用したテンプレート関数の特殊化

  19. 19

    テンプレートの特殊化で非型テンプレートテンプレートパラメータを使用する

  20. 20

    部分的なテンプレートメンバーの特殊化

  21. 21

    クラスと関数テンプレートの特殊化

  22. 22

    STLコンテナであるテンプレートパラメータに基づいて、選択したメンバー関数の部分的な特殊化をシミュレートするにはどうすればよいですか?

  23. 23

    複数のタイプのクラステンプレートの特殊化

  24. 24

    特定のタイプのテンプレートクラスメソッドを特殊化する方法は?

  25. 25

    部分的なテンプレートの特殊化エラー

  26. 26

    テンプレートの特殊化におけるデフォルトの引数パラメータ

  27. 27

    c ++テンプレート特殊化パラメーターの複製

  28. 28

    任意の特殊化タイプの別のテンプレートによるテンプレートパラメータの制約

  29. 29

    依存型による非型テンプレートパラメーターを使用した単一型テンプレートパラメータークラステンプレートの部分的な特殊化

ホットタグ

アーカイブ