メンバー関数テンプレートのインスタンス化を削除するにはどうすればよいですか?

ラトネシュ・ティワリ

メンバー関数テンプレートのインスタンス化を停止する方法を学んでいます。c ++ 20では、requires句を使用してテンプレート引数に制約を設定し、これを使用してc ++ 20でのインスタンス化を停止できます。

このコードのc ++ 11/14/17のrequires句を置き換えることができるコード行はどれですか。

#include <iostream>
#include <string>

struct St {
    template<typename T>
    // C++11/14/17 ???
    requires ( !(std::is_same<T, bool>::value || std::is_same<T, std::string>::value)) // C++20
    constexpr auto increment_by_one(T targ) const noexcept { return targ+1; }

};

int main() {
    St s;
    std::cout << s.increment_by_one(5) << '\n';
    std::cout << s.increment_by_one(8.6) << '\n';
    std::cout << s.increment_by_one(6.6f) << '\n';
    //std::cout << s.increment_by_one(true) << '\n';
    //std::cout << s.increment_by_one(std::string("test string")) << '\n';

    return 0;
}

https://gcc.godbolt.org/z/vjc5cE

テッド・リンモ

タイプトレイトの使用std::enable_if

#include <type_traits>

// ...

    template<typename T,
        typename std::enable_if<
          !(std::is_same<T, bool>::value || std::is_same<T, std::string>::value),
          int
        >::type = 0
    >
    constexpr auto increment_by_one(T targ) const noexcept -> decltype(targ+1) {
        return targ+1;                                  //    ^^^^^^^^^^^^^^^^
    }                                                   // trailing return type 

を使用してautoいる場合は、C ++ 14より前に末尾の戻り値の型を追加する必要があることに注意してください

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

テンプレート関数のエイリアスとインスタンス化を同時に行うにはどうすればよいですか?

分類Dev

C ++でテンプレート関数インスタンスのショートカットを作成するにはどうすればよいですか?

分類Dev

型特性を持つクラステンプレートの静的データメンバーを初期化するにはどうすればよいですか?

分類Dev

テンプレートテンプレートパラメータを使用して関数を明示的にインスタンス化するにはどうすればよいですか

分類Dev

複数のテンプレートパラメータを持つテンプレートクラスを条件付きでインスタンス化するにはどうすればよいですか?

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

テンプレート化されたメンバー関数の特殊なバリアントへのポインターを作成するにはどうすればよいですか?

分類Dev

Deviseメールテンプレートにインスタンス変数を追加するにはどうすればよいですか?

分類Dev

インライン変数テンプレートのカスタマイズポイントを作成するにはどうすればよいですか?

分類Dev

テンプレートタイプで静的メンバーの初期化を強制する方法は?またはテンプレートタイプから派生したすべてのクラスの数を取得するにはどうすればよいですか?

分類Dev

関数ポインタをクラステンプレートパラメータとして渡すにはどうすればよいですか?

分類Dev

テンプレート関数またはクラス内の型を含むコンテナの変数をインスタンス化するにはどうすればよいですか?

分類Dev

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

分類Dev

クラステンプレートのメンバーとしてファンクターを使用するにはどうすればよいですか?

分類Dev

テンプレート化されたクラスインスタンスをテンプレートパラメータとして別のテンプレートに渡すにはどうすればよいですか?

分類Dev

Cythonの2つのタイプにC ++でテンプレート化された関数を使用するにはどうすればよいですか?

分類Dev

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

分類Dev

C ++の複数のクラスタイプに同じテンプレートメンバー関数を指定するにはどうすればよいですか?

分類Dev

非トレーリングdecltype戻り値の型を使用してアウトオブラインクラステンプレートメンバー関数を定義するにはどうすればよいですか?

分類Dev

非トレーリングdecltype戻り値の型を使用してアウトオブラインクラステンプレートメンバー関数を定義するにはどうすればよいですか?

分類Dev

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

分類Dev

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

分類Dev

折り返し式を使用して可変個引数テンプレート関数の各タイプをインスタンス化するにはどうすればよいですか?

分類Dev

tkinterのボタンクリックでプログレスバーをインクリメントするにはどうすればよいですか?

分類Dev

メンバー関数の最後でデストラクタの呼び出しをバイパスするにはどうすればよいですか?

分類Dev

可変個引数テンプレートクラスのテンプレートタイプにメタ関数を適用するにはどうすればよいですか?

分類Dev

C ++ 03で、インスタンス化されたテンプレート関数のアドレスを参照するにはどうすればよいですか?

Related 関連記事

  1. 1

    テンプレート関数のエイリアスとインスタンス化を同時に行うにはどうすればよいですか?

  2. 2

    C ++でテンプレート関数インスタンスのショートカットを作成するにはどうすればよいですか?

  3. 3

    型特性を持つクラステンプレートの静的データメンバーを初期化するにはどうすればよいですか?

  4. 4

    テンプレートテンプレートパラメータを使用して関数を明示的にインスタンス化するにはどうすればよいですか

  5. 5

    複数のテンプレートパラメータを持つテンプレートクラスを条件付きでインスタンス化するにはどうすればよいですか?

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

    テンプレート化されたメンバー関数の特殊なバリアントへのポインターを作成するにはどうすればよいですか?

  10. 10

    Deviseメールテンプレートにインスタンス変数を追加するにはどうすればよいですか?

  11. 11

    インライン変数テンプレートのカスタマイズポイントを作成するにはどうすればよいですか?

  12. 12

    テンプレートタイプで静的メンバーの初期化を強制する方法は?またはテンプレートタイプから派生したすべてのクラスの数を取得するにはどうすればよいですか?

  13. 13

    関数ポインタをクラステンプレートパラメータとして渡すにはどうすればよいですか?

  14. 14

    テンプレート関数またはクラス内の型を含むコンテナの変数をインスタンス化するにはどうすればよいですか?

  15. 15

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

  16. 16

    クラステンプレートのメンバーとしてファンクターを使用するにはどうすればよいですか?

  17. 17

    テンプレート化されたクラスインスタンスをテンプレートパラメータとして別のテンプレートに渡すにはどうすればよいですか?

  18. 18

    Cythonの2つのタイプにC ++でテンプレート化された関数を使用するにはどうすればよいですか?

  19. 19

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

  20. 20

    C ++の複数のクラスタイプに同じテンプレートメンバー関数を指定するにはどうすればよいですか?

  21. 21

    非トレーリングdecltype戻り値の型を使用してアウトオブラインクラステンプレートメンバー関数を定義するにはどうすればよいですか?

  22. 22

    非トレーリングdecltype戻り値の型を使用してアウトオブラインクラステンプレートメンバー関数を定義するにはどうすればよいですか?

  23. 23

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

  24. 24

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

  25. 25

    折り返し式を使用して可変個引数テンプレート関数の各タイプをインスタンス化するにはどうすればよいですか?

  26. 26

    tkinterのボタンクリックでプログレスバーをインクリメントするにはどうすればよいですか?

  27. 27

    メンバー関数の最後でデストラクタの呼び出しをバイパスするにはどうすればよいですか?

  28. 28

    可変個引数テンプレートクラスのテンプレートタイプにメタ関数を適用するにはどうすればよいですか?

  29. 29

    C ++ 03で、インスタンス化されたテンプレート関数のアドレスを参照するにはどうすればよいですか?

ホットタグ

アーカイブ