「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > テンプレート引数に基づいてメンバー関数を選択するためにenable_ifを使用する方法は?

テンプレート引数に基づいてメンバー関数を選択するためにenable_ifを使用する方法は?

2024 年 11 月 11 日に公開
ブラウズ:350

How to Use enable_if to Select Member Functions Based on Template Arguments?

さまざまなenable_if条件を使用したメンバー関数の選択

enable_ifメタ関数は、テンプレート関数のパラメーターを指定し、それに基づいて適切なメンバー関数を選択するために利用されます。 。次のコードを考えてみましょう:

template
struct Point
{
  // Check if T is int and call MyFunction for int
  void MyFunction(typename std::enable_if<:is_same int>::value, T &>::type* = 0)
  {
    std::cout ::value, float &>::type* = 0)
  {
    std::cout 

ただし、このコードは、「'struct std::enable_if' に 'type' という名前の型がありません」というコンパイラ エラーを引き起こす可能性があります。

enable_if について

enable_if は、オーバーロードの解決中に実行可能な関数オーバーロードのみが考慮されるようにします。テンプレート引数の置換が失敗した場合、そのオーバーロードは候補セットから削除されます。

上記の例では、テンプレート引数 T はメンバー関数のインスタンス化時にすでにわかっています。望ましい動作を実装するには、デフォルトで T に設定されたダミーのテンプレート引数を作成し、それを使用して SFINAE を実行します。

template
struct Point
{
  template
  typename std::enable_if<:is_same int>::value>::type
    MyFunction()
  {
    std::cout 
  typename std::enable_if<:is_same float>::value>::type
    MyFunction()
  {
    std::cout 
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3