関数テンプレートの部分的な特殊化を回避するにはどうすればよいですか?

user1899020

たとえば、次のクラスがあります。

class A
{
    enum {N = 5};
    double mVariable;

    template<class T, int i>
    void f(T& t)
    {
        g(mVariable); // call some function using mVariable.
        f<T, i+1>(t); // go to next loop
    }

    template<class T>
    void f<T, N>(T& t)
    {} // stop loop when hit N.
};

関数テンプレートでは、部分的な特殊化は許可されていません。私の場合、どうすれば回避できますか?

Arne Mertzの例を次のように少し変更しました:

template<int n>
struct A
{
    enum {N = n};
    ...
};

次のようにAを使用します。

A<5> a;

Visual Studio 2012でコンパイルできません。コンパイラのバグか何か他のものですか?なかなかおかしいです。

編集:チェック済み。これはVisualStudioのバグです。:(

Nimはそれを実装するための最も簡単な方法を提供すると思います。

c ++ 11のサポートにより、次のことができます。

#include <iostream>
#include <type_traits>
using namespace std;

struct A
{
    enum {N = 5};
    double mVariable;

    void g(int i, double v)
    { std::cout << i << "  " << v << std::endl; }

    template<int i, class T>
    typename enable_if<i >= N>::type f(T& t)
    {} // stop loop when hit N.

    template<int i, class T>
    typename enable_if<i < N>::type f(T& t)
    {
        g(i, mVariable); // call some function using mVariable.
        f<i+1, T>(t); // go to next loop
    }

};

int main(void)
{
    A a;
    int v = 0;
    a.f<0>(v);
}

私が好きな主な理由は、前の回答で要求されたようなくだらないものは必要ないということです...

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

関数テンプレートの特殊化を減らすにはどうすればよいですか?

分類Dev

関数テンプレートを「部分的に特殊化」できるように調整するにはどうすればよいですか?

分類Dev

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

分類Dev

同じテンプレート関数で複数のタイプを特殊化するにはどうすればよいですか?

分類Dev

部分的なクラステンプレートの特殊化で継承を実装するにはどうすればよいですか?

分類Dev

関数テンプレートを部分的に特殊化する代わりに、どうすればよいですか?

分類Dev

typename引数のないテンプレートを特殊化するにはどうすればよいですか?

分類Dev

既存のテンプレートクラスを新しいタイプに部分的に特殊化するにはどうすればよいですか?

分類Dev

クラステンプレートによって演算子関数タイプを特殊化するにはどうすればよいですか?

分類Dev

クラステンプレートの非型パラメータを部分的に特殊化するにはどうすればよいですか?

分類Dev

std :: string用にテンプレートを特殊化するにはどうすればよいですか

分類Dev

列挙値のクラステンプレートを部分的に特殊化するにはどうすればよいですか?

分類Dev

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

分類Dev

テンプレート化されていないクラスのテンプレート化されたメンバーメソッドを部分的に特殊化するにはどうすればよいですか?

分類Dev

定義とは別にvoidに部分的に特殊化されたテンプレートを実装するにはどうすればよいですか?

分類Dev

異なるタイプを返すように設計されたテンプレート関数をどのように特殊化できますか?

分類Dev

関数型インターフェースのストレート宣言で型を特殊化するにはどうすればよいですか?

分類Dev

完全に特殊化されたテンプレートクラスの定義の外でテンプレートメンバー関数を定義するにはどうすればよいですか?

分類Dev

完全に特殊化されたテンプレートクラスの定義の外でテンプレートメンバー関数を定義するにはどうすればよいですか?

分類Dev

パラメータパックと非型テンプレート値を使用して部分的なテンプレートの特殊化を実行するにはどうすればよいですか?

分類Dev

C ++ 11では、戻り値の型に基づいて関数オブジェクトを受け取る関数テンプレートを特殊化するにはどうすればよいですか?

分類Dev

.cppファイルでテンプレートメンバー関数の明示的な特殊化を定義するにはどうすればよいですか?

分類Dev

type_traitsまたはテンプレート関数の特殊化を使用してテンプレートメソッドを統合するにはどうすればよいですか

分類Dev

テンプレート化されたクラスの基本クラスに基づいてメンバー関数を特殊化するにはどうすればよいですか

分類Dev

クラステンプレートの特殊化を使用してエイリアステンプレートの特殊化を作成するにはどうすればよいですか?

分類Dev

クラスを特殊化する場合、異なる数のテンプレートパラメータを取得するにはどうすればよいですか?

分類Dev

* .cppファイルにテンプレート特殊化メソッドを実装するにはどうすればよいですか?

分類Dev

それ自体がテンプレートであり、戻り型のみがテンプレート型に依存する型でテンプレートメソッドを特殊化するにはどうすればよいですか?

分類Dev

インスタンス化されている場合、テンプレート化された変数の特殊化をコンパイル時に失敗させるにはどうすればよいですか?

Related 関連記事

  1. 1

    関数テンプレートの特殊化を減らすにはどうすればよいですか?

  2. 2

    関数テンプレートを「部分的に特殊化」できるように調整するにはどうすればよいですか?

  3. 3

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

  4. 4

    同じテンプレート関数で複数のタイプを特殊化するにはどうすればよいですか?

  5. 5

    部分的なクラステンプレートの特殊化で継承を実装するにはどうすればよいですか?

  6. 6

    関数テンプレートを部分的に特殊化する代わりに、どうすればよいですか?

  7. 7

    typename引数のないテンプレートを特殊化するにはどうすればよいですか?

  8. 8

    既存のテンプレートクラスを新しいタイプに部分的に特殊化するにはどうすればよいですか?

  9. 9

    クラステンプレートによって演算子関数タイプを特殊化するにはどうすればよいですか?

  10. 10

    クラステンプレートの非型パラメータを部分的に特殊化するにはどうすればよいですか?

  11. 11

    std :: string用にテンプレートを特殊化するにはどうすればよいですか

  12. 12

    列挙値のクラステンプレートを部分的に特殊化するにはどうすればよいですか?

  13. 13

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

  14. 14

    テンプレート化されていないクラスのテンプレート化されたメンバーメソッドを部分的に特殊化するにはどうすればよいですか?

  15. 15

    定義とは別にvoidに部分的に特殊化されたテンプレートを実装するにはどうすればよいですか?

  16. 16

    異なるタイプを返すように設計されたテンプレート関数をどのように特殊化できますか?

  17. 17

    関数型インターフェースのストレート宣言で型を特殊化するにはどうすればよいですか?

  18. 18

    完全に特殊化されたテンプレートクラスの定義の外でテンプレートメンバー関数を定義するにはどうすればよいですか?

  19. 19

    完全に特殊化されたテンプレートクラスの定義の外でテンプレートメンバー関数を定義するにはどうすればよいですか?

  20. 20

    パラメータパックと非型テンプレート値を使用して部分的なテンプレートの特殊化を実行するにはどうすればよいですか?

  21. 21

    C ++ 11では、戻り値の型に基づいて関数オブジェクトを受け取る関数テンプレートを特殊化するにはどうすればよいですか?

  22. 22

    .cppファイルでテンプレートメンバー関数の明示的な特殊化を定義するにはどうすればよいですか?

  23. 23

    type_traitsまたはテンプレート関数の特殊化を使用してテンプレートメソッドを統合するにはどうすればよいですか

  24. 24

    テンプレート化されたクラスの基本クラスに基づいてメンバー関数を特殊化するにはどうすればよいですか

  25. 25

    クラステンプレートの特殊化を使用してエイリアステンプレートの特殊化を作成するにはどうすればよいですか?

  26. 26

    クラスを特殊化する場合、異なる数のテンプレートパラメータを取得するにはどうすればよいですか?

  27. 27

    * .cppファイルにテンプレート特殊化メソッドを実装するにはどうすればよいですか?

  28. 28

    それ自体がテンプレートであり、戻り型のみがテンプレート型に依存する型でテンプレートメソッドを特殊化するにはどうすればよいですか?

  29. 29

    インスタンス化されている場合、テンプレート化された変数の特殊化をコンパイル時に失敗させるにはどうすればよいですか?

ホットタグ

アーカイブ