テンプレートパックの特殊化 (パラメーターなし) を持つ関数を作成しようとしていますが、関数の特殊化によって他の何かが出力されて停止する最後のメッセージまで、メッセージが出力されます。説明が本当に下手なので、ここに私がやろうとしていることのコードを投稿します。
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()
パラメータのようなものUpdateStuff(T first, TT... second)
と特殊化を1つだけ与えることで機能させるUpdateStuff(T first)
ことができましたが、これが可能かどうかを知りたいfunction parameters 、質問の要約を示します。
UpdateStuff<TT...>();
TT がdouble
コンパイル時だけの場合、最初の関数を使用しないのはなぜですか?- 関数パラメーターなしで達成しようとしていることを実行することは可能ですか?
事前に感謝します。私の質問に関連する何かを理解していない場合は、より詳しく説明していただければ幸いです。私の下手な英語で申し訳ありません。