再帰的なテンプレート関数の最初の呼び出しで関数を実行するにはどうすればよいですか?

Rockets1111

質問のタイトルがすべてを物語っていますが、再帰的なテンプレート関数の最初の呼び出しで関数をどのように実行しますか?


関数シグニチャでデフォルト変数を使用することを考えましたが、変数が関数シグニチャの残りの部分に干渉しない場所はありません。これが私が意味することです:

template<typename T, typename... Ts>
void print(T first, Ts... params) { ... }

注:私が使用しているboolb関数は、それ自体から呼び出されなかった場合)を決定します。

  1. void print(bool b = true, T first, Ts... params);print("hello");コンパイラb"hello"。で初期化されるため、1つの引数(つまりのみで呼び出された場合は機能しません
  2. void print(T first, bool b = true, Ts... params);print("hello", "world", "again");コンパイラbはパラメータパックの2番目のパラメータで初期化するため、複数の引数(つまり)では機能しません
  3. void print(T first, Ts... params, bool b = true);パラメータパックの最後のパラメータで初期化されること2を除いて、と同じbです。

私が欲しいのはこのようなものです(または必要に応じてテンプレート引数を含む他の何か(または完全に異なるもの))

template<typename T, typename... Ts>
void print(T first, Ts... params)
{
    if (...) // Magic!
        foo();
    std::cout << first << '\n';

    print(params...);
}

何か案は?

ガリック

これを解決する1つの方法は、複数の関数を使用することです。外部関数は追加の呼び出しを行い、次に再帰的な内部関数を呼び出します。

void foo()
{
    std::cout << "foo\n";
}

// satisfy the zero-parameter case
void internal_print()
{
}

// inner recursive function    
template<typename T, typename... Ts>
void internal_print(T first, Ts... params)
{
    std::cout << first << '\n';
    internal_print(params...);
}

// outer special case function    
template<typename... Ts>
void print(Ts... params)
{
    foo();
    internal_print(params...);
}

int main()
{
    print(1, 2, "three", 4.0);
}

出力:

foo
1
2
three
4

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

関数の最初の呼び出しでのみifステートメントを実行するにはどうすればよいですか?

分類Dev

関数が再度呼び出された場合、関数の最初の呼び出しの実行を停止するにはどうすればよいですか?

分類Dev

他のスコープ関数を呼び出すjavascript関数を「再帰的に」文字列化するにはどうすればよいですか?

分類Dev

関数への再帰呼び出しを返すにはどうすればよいですか?

分類Dev

再帰を使用して、Pythonで別の関数を繰り返し呼び出す関数を作成するにはどうすればよいですか?

分類Dev

Pythonでの再帰的な関数呼び出しが原因で発生したUnboundLocalErrorを修正するにはどうすればよいですか?

分類Dev

非同期呼び出しを行う関数を実行する場合、ループを実行する場合、関数の残りの部分を実行する前に呼び出しを待機させるにはどうすればよいですか?

分類Dev

他の関数のループの実行が完了したときに、swift で関数を呼び出すにはどうすればよいですか?

分類Dev

blazeComponent のさまざまなテンプレートから関数を呼び出すにはどうすればよいですか?

分類Dev

既存のサイプレステストの関数を再利用して、新しい関数で呼び出すにはどうすればよいですか?

分類Dev

特定の回数の再帰呼び出しの後で関数を停止するにはどうすればよいですか?

分類Dev

このHaskell関数で発生した再帰呼び出しの数を計算するにはどうすればよいですか?

分類Dev

再帰呼び出しの数を同時に2つの関数に制限するにはどうすればよいですか?-Python

分類Dev

別のスクリプトが終了した後に実行するJavaScript関数を呼び出すにはどうすればよいですか?

分類Dev

Numbaで、GPUで実行されている再帰関数を呼び出すにはどうすればよいですか?

分類Dev

Emberのテンプレートからコントローラー関数を呼び出すにはどうすればよいですか?

分類Dev

関数ポインタを介してクラスメンバー関数を再帰的に呼び出すにはどうすればよいですか?

分類Dev

再帰関数を使用して、テキストから最初のスペースまで文字列を取得するにはどうすればよいですか?

分類Dev

Openerp-特定のビューが呼び出されるたびに実行する関数を呼び出すにはどうすればよいですか?

分類Dev

C ++テンプレートクラスを使用してテンプレート関数を呼び出すにはどうすればよいですか?

分類Dev

VBAのサブ関数で、呼び出し元の関数からエラー処理を再開するにはどうすればよいですか?

分類Dev

テンプレート配列演算子のオーバーロード関数を呼び出すにはどうすればよいですか?

分類Dev

関数呼び出しのselectで行全体を使用するにはどうすればよいですか?

分類Dev

foreachループ内で関数を呼び出して、エラーの再宣言を回避するにはどうすればよいですか?

分類Dev

メソッドチェーンを使用して、関数がコースを実行するのを待ってから再度呼び出す前に、同じJavaScript関数を繰り返し呼び出すにはどうすればよいですか?

分類Dev

JS関数で渡された関数呼び出しをevalなしで文字列として実行するにはどうすればよいですか?

分類Dev

Javascriptで別の関数の関数呼び出し数をテストするにはどうすればよいですか?

分類Dev

xmlhttp呼び出しからデータを受信したときにのみ関数を実行するにはどうすればよいですか?

分類Dev

JavaScriptで最初に関数を呼び出してから2番目の関数を呼び出すにはどうすればよいですか?

Related 関連記事

  1. 1

    関数の最初の呼び出しでのみifステートメントを実行するにはどうすればよいですか?

  2. 2

    関数が再度呼び出された場合、関数の最初の呼び出しの実行を停止するにはどうすればよいですか?

  3. 3

    他のスコープ関数を呼び出すjavascript関数を「再帰的に」文字列化するにはどうすればよいですか?

  4. 4

    関数への再帰呼び出しを返すにはどうすればよいですか?

  5. 5

    再帰を使用して、Pythonで別の関数を繰り返し呼び出す関数を作成するにはどうすればよいですか?

  6. 6

    Pythonでの再帰的な関数呼び出しが原因で発生したUnboundLocalErrorを修正するにはどうすればよいですか?

  7. 7

    非同期呼び出しを行う関数を実行する場合、ループを実行する場合、関数の残りの部分を実行する前に呼び出しを待機させるにはどうすればよいですか?

  8. 8

    他の関数のループの実行が完了したときに、swift で関数を呼び出すにはどうすればよいですか?

  9. 9

    blazeComponent のさまざまなテンプレートから関数を呼び出すにはどうすればよいですか?

  10. 10

    既存のサイプレステストの関数を再利用して、新しい関数で呼び出すにはどうすればよいですか?

  11. 11

    特定の回数の再帰呼び出しの後で関数を停止するにはどうすればよいですか?

  12. 12

    このHaskell関数で発生した再帰呼び出しの数を計算するにはどうすればよいですか?

  13. 13

    再帰呼び出しの数を同時に2つの関数に制限するにはどうすればよいですか?-Python

  14. 14

    別のスクリプトが終了した後に実行するJavaScript関数を呼び出すにはどうすればよいですか?

  15. 15

    Numbaで、GPUで実行されている再帰関数を呼び出すにはどうすればよいですか?

  16. 16

    Emberのテンプレートからコントローラー関数を呼び出すにはどうすればよいですか?

  17. 17

    関数ポインタを介してクラスメンバー関数を再帰的に呼び出すにはどうすればよいですか?

  18. 18

    再帰関数を使用して、テキストから最初のスペースまで文字列を取得するにはどうすればよいですか?

  19. 19

    Openerp-特定のビューが呼び出されるたびに実行する関数を呼び出すにはどうすればよいですか?

  20. 20

    C ++テンプレートクラスを使用してテンプレート関数を呼び出すにはどうすればよいですか?

  21. 21

    VBAのサブ関数で、呼び出し元の関数からエラー処理を再開するにはどうすればよいですか?

  22. 22

    テンプレート配列演算子のオーバーロード関数を呼び出すにはどうすればよいですか?

  23. 23

    関数呼び出しのselectで行全体を使用するにはどうすればよいですか?

  24. 24

    foreachループ内で関数を呼び出して、エラーの再宣言を回避するにはどうすればよいですか?

  25. 25

    メソッドチェーンを使用して、関数がコースを実行するのを待ってから再度呼び出す前に、同じJavaScript関数を繰り返し呼び出すにはどうすればよいですか?

  26. 26

    JS関数で渡された関数呼び出しをevalなしで文字列として実行するにはどうすればよいですか?

  27. 27

    Javascriptで別の関数の関数呼び出し数をテストするにはどうすればよいですか?

  28. 28

    xmlhttp呼び出しからデータを受信したときにのみ関数を実行するにはどうすればよいですか?

  29. 29

    JavaScriptで最初に関数を呼び出してから2番目の関数を呼び出すにはどうすればよいですか?

ホットタグ

アーカイブ