質問タイトルはそれをすべて言っているので、再帰的テンプレート関数の最初の呼び出しで関数をどのように実行しますか? 再帰的テンプレート関数の最初の呼び出しで関数を実行する方法は?
私は関数シグネチャでデフォルト変数を使用することを考えましたが、変数が関数シグネチャの残りの部分と干渉しない場所はありません。ここでは、私の意味は次のとおりです。
template<typename T, typename... Ts>
void print(T first, Ts... params) { ... }
注:私は、関数が自身から呼び出されなかったかどうかを判断するためにbool
(b
)を使用しています。
void print(bool b = true, T first, Ts... params);
。コンパイラがb
を"hello"
で初期化するため、1つの引数(つまり、print("hello");
)で呼び出すと機能しません。void print(T first, bool b = true, Ts... params);
。コンパイラがパラメータパックの2番目のパラメータでb
を初期化するため、複数の引数(つまりprint("hello", "world", "again");
)では機能しません。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...);
}
任意のアイデア?
は多分二つの機能を持っていますか?最初の関数は余分な呼び出しを行い、再帰を行う2番目の関数を呼び出します。 – Galik
@Galik私はそれがうまくいくと思います:)ありがとう – Rakete1111
あなたが知りたいことは、それがこの機能を初めて呼び出すのですか? – Kason