これは私の以前の投稿に関連しています。試みた 1 つの解決策がうまくいかなかった理由を知りたいです。
template <typename... T> /* A */
size_t num_args ();
template <>
size_t num_args <> ()
{
return 0;
}
template <typename H, typename... T> /* B */
size_t num_args ()
{
return 1 + num_args <T...> ();
}
たとえば、呼び出そうとするとnum_args<int,float>()
、関数呼び出しがあいまいであるというエラーが表示されます。
- T={int,float} の A
- H=int、T={float} の B
これがあいまいである理由がわかりません。A は宣言であり、B は A によって宣言された関数の定義です。
私はこの例を機能させようとしていますが、以前の質問への回答は、決して機能しないと主張しているようです。
その場合、可変長自由関数のポイントは何ですか? 彼らは何ができますか?