テンプレートを特殊化する(パラメータはありません)関数を作成しようとしていますが、関数の特殊化によって何か他のものが印刷される最後のものまでメッセージが出力されます。やめる。 私はここで、説明本当に悪いんだと私は私が何をしようとしているのコードを投稿する:最初の注意点としてはVariadic Template Packに関数の指定を与える
template <typename T>
constexpr void UpdateStuff()
{
std::cerr << "I am the last one :D" << std::endl;
}
template< typename T ,typename... TT>
constexpr void UpdateStuff()
{
std::cerr << "I am NOT the last one :D";
UpdateStuff<TT...>();
}
int main()
{
UpdateStuff<int,double>(); // Should only print text twice
std::cin.get();
return 1;
}
、私はこれが動作しません知っている、UpdateStuff<TT...>();
それは曖昧のコールを生成します関数をオーバーロードするには、のようなパラメータをUpdateStuff(T first, TT... second)
と特殊化のみ1つをUpdateStuff(T first)
に与えることによって動作させることができましたが、これが関数パラメータなしで可能かどうかを知りたいのですが、私は質問をまとめます:
- I
UpdateStuff<TT...>();
がうまくいかない理由を完全に理解していない、TTがコンパイル時にdouble
の場合、なぜ最初の関数を使用しないのですか? - 私は機能パラメータなしで達成しようとしていることを行うことは可能ですか?
ご質問ありがとうございました。私の質問に関連することを理解していないと、私はそれをよりうまく説明することに感謝し、私の貧しい英語を申し訳ありません。
私の推測では、 'UpdateStuffは()ということであるようなもの;' TT'が空パックとしてそこに推測されるように、 '' UpdateStuff'機能の両方のオーバーロードと一致します... –