I'm sorry if this question is basic. Let's say I have a function template that took in a parameter pack of arguments. How would I overload it so that there might be a specialization for 2 arguments getting passed in, 3 arguments passed in, etc.
For small parameter packs, I'd use non-variadic overloads:
template <typename A, typename B> void foo(A a, B b);
template <typename A, typename B, typename C> void foo(A a, B b, C c);
If you prefer to have a pack, you can constrain the size with requires
or std::enable_if_t
:
template <typename ...P> requires(sizeof...(P) == 2) void foo(P ...p);
template <typename ...P> requires(sizeof...(P) == 3) void foo(P ...p);
Another option is to have a single variadic function, and select the behavior with if constexpr (sizeof...(P) == N)
.