可変個引数データ構造に格納されているフィールドをメソッド引数として使用する

アダムコトワシンスキー

可変個引数のデータ構造があり、各「レイヤー」には1つのフィールドが含まれています。

構造体に格納されているすべてのフィールドを関数またはコンストラクターの引数として使用するにはどうすればよいですか?

template <class... Ts> class Builder {};

template <class T, class... Ts>
class Builder<T, Ts...> : public Builder<Ts...> {
public:
    Builder(T t, Ts... ts) : Builder<Ts...>(ts...), tail(t) {}

    Result build() {
      // want to use tail, Builder<Ts...>::tail, etc.
      // as ctor or function arguments without multiple specializations
    }

private:
    const T tail;
};

一般的に、私は次のようなことができるようになりたいと思っています。

Builder<int, string, int> b1{10, "aaa", 20};
Result r1 = b1.build(); // should invoke Result's constructor (int, string, int)

Builder<int> b2{10};
Result r2 = b2.build(); // should invoke Result's constructor (int)
オリヴ

タプルをメンバーとして使用して値を保持したくない場合は、次のようにすることができます。

template <class... Ts> class Builder {
  protected:
  template<class...Us>
  Result do_build(const Us&...us){
    return Result(us...);
    }
  };

template <class T, class... Ts>
class Builder<T, Ts...> : public Builder<Ts...> {
public:
    Builder(T t, Ts... ts) : Builder<Ts...>(ts...), tail(t) {}

    Result build() {
      return do_build();
    }
protected:
  template<class...Us>
  Result do_build(const Us&...us){
    return Builder<Ts...>::do_build(us...,tail);
    }
private:
    const T tail;
};

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

オーバーロードされたメソッドを使用した可変個引数データ構造

分類Dev

可変引数オーバーロードされたメソッド(オブジェクト... O)と非可変引数メソッド(オブジェクトo)に引数としてnullを渡すときに、なぜメソッドが実行される可変引数?

分類Dev

可変個引数テンプレートクラスがテンプレート引数から継承されている場合に、基本型のメソッドを呼び出す際のパラメータパックを展開します

分類Dev

メソッドの引数として任意のタイプと量の引数を持つvoid関数を渡し、それをデータメンバーに格納する方法はありますか?(C ++)

分類Dev

メソッド内でVue.jsデータプロパティを引数として渡さずに使用するのは間違っていますか?

分類Dev

可変個引数テンプレートのクラスメソッドに、関数テンプレートから派生した型の引数として関数ポインタを使用させる方法は?

分類Dev

可変数の引数を使用してPython関数をフィードする

分類Dev

サービスメソッドの引数としてルートパラメータを使用するにはどうすればよいですか?

分類Dev

変数に格納されている値をメソッド呼び出しとして使用するにはどうすればよいですか?

分類Dev

get関数を使用してノードに格納されているデータにアクセスする

分類Dev

array.prototype.filter()メソッドを使用して、別の配列の引数に基づいてフィルター処理する

分類Dev

クロージャで(変数に格納されている)メソッドを呼び出す

分類Dev

可変引数を受け入れるメソッドへのパラメーターとしてシーケンスを提供する

分類Dev

sfinaeを使用して、可変個引数テンプレートの基本クラスに特定のメソッドがあるかどうかを検出する

分類Dev

rubyメソッドの引数としてグローバル変数を使用する

分類Dev

引数として使用される変数の値を変更する静的メソッド

分類Dev

Graphqlルビーフィールドに渡される引数を使用して結果を変換するにはどうすればよいですか?

分類Dev

値がプレフィックス$を使用してデータベースに格納されている場合、データベース値をPHP変数として数学演算として表示します

分類Dev

メソッドを呼び出すときにオプションの引数としてディクショナリパラメータを使用する

分類Dev

変数に格納されているスペースで区切られた引数をコマンドに渡します

分類Dev

画像データ型を使用してSQLServerフィールドに格納されている画像を表示するにはどうすればよいですか?

分類Dev

配列に格納されているフィールドのデータを返します

分類Dev

オプションで、可変個引数テンプレートパラメータに基づいてメソッドを公開します

分類Dev

Python:デコレータを使用してメソッド引数を変更するのは悪いことですか?

分類Dev

引数の数が間違っているレールがメソッドに引数を渡さない

分類Dev

変数に格納されているメソッドの名前を取得します

分類Dev

可変個引数テンプレート-渡された引数を格納する型を作成するにはどうすればよいですか

分類Dev

Golangの構造体へのポインターを使用してメソッドを関数に変換する

分類Dev

仮想メソッドテーブルに格納されているアドレスを使用して仮想関数を呼び出すと、ガベージが返されるのはなぜですか?

Related 関連記事

  1. 1

    オーバーロードされたメソッドを使用した可変個引数データ構造

  2. 2

    可変引数オーバーロードされたメソッド(オブジェクト... O)と非可変引数メソッド(オブジェクトo)に引数としてnullを渡すときに、なぜメソッドが実行される可変引数?

  3. 3

    可変個引数テンプレートクラスがテンプレート引数から継承されている場合に、基本型のメソッドを呼び出す際のパラメータパックを展開します

  4. 4

    メソッドの引数として任意のタイプと量の引数を持つvoid関数を渡し、それをデータメンバーに格納する方法はありますか?(C ++)

  5. 5

    メソッド内でVue.jsデータプロパティを引数として渡さずに使用するのは間違っていますか?

  6. 6

    可変個引数テンプレートのクラスメソッドに、関数テンプレートから派生した型の引数として関数ポインタを使用させる方法は?

  7. 7

    可変数の引数を使用してPython関数をフィードする

  8. 8

    サービスメソッドの引数としてルートパラメータを使用するにはどうすればよいですか?

  9. 9

    変数に格納されている値をメソッド呼び出しとして使用するにはどうすればよいですか?

  10. 10

    get関数を使用してノードに格納されているデータにアクセスする

  11. 11

    array.prototype.filter()メソッドを使用して、別の配列の引数に基づいてフィルター処理する

  12. 12

    クロージャで(変数に格納されている)メソッドを呼び出す

  13. 13

    可変引数を受け入れるメソッドへのパラメーターとしてシーケンスを提供する

  14. 14

    sfinaeを使用して、可変個引数テンプレートの基本クラスに特定のメソッドがあるかどうかを検出する

  15. 15

    rubyメソッドの引数としてグローバル変数を使用する

  16. 16

    引数として使用される変数の値を変更する静的メソッド

  17. 17

    Graphqlルビーフィールドに渡される引数を使用して結果を変換するにはどうすればよいですか?

  18. 18

    値がプレフィックス$を使用してデータベースに格納されている場合、データベース値をPHP変数として数学演算として表示します

  19. 19

    メソッドを呼び出すときにオプションの引数としてディクショナリパラメータを使用する

  20. 20

    変数に格納されているスペースで区切られた引数をコマンドに渡します

  21. 21

    画像データ型を使用してSQLServerフィールドに格納されている画像を表示するにはどうすればよいですか?

  22. 22

    配列に格納されているフィールドのデータを返します

  23. 23

    オプションで、可変個引数テンプレートパラメータに基づいてメソッドを公開します

  24. 24

    Python:デコレータを使用してメソッド引数を変更するのは悪いことですか?

  25. 25

    引数の数が間違っているレールがメソッドに引数を渡さない

  26. 26

    変数に格納されているメソッドの名前を取得します

  27. 27

    可変個引数テンプレート-渡された引数を格納する型を作成するにはどうすればよいですか

  28. 28

    Golangの構造体へのポインターを使用してメソッドを関数に変換する

  29. 29

    仮想メソッドテーブルに格納されているアドレスを使用して仮想関数を呼び出すと、ガベージが返されるのはなぜですか?

ホットタグ

アーカイブ