I prefer to create the (pointer, count) function and then use an inline template overload that converts the call automatically.
That means I can also use an std::vector<Surface> surfaces; and pass it at no cost if I create another inline overload:
inline void Func( const std::vector<Surface> &objects)
{
Func(objects.data(), objects.size());
}