有没有办法在模板函数中使用可变数量的类型名,比如参数包?

Is there a way of having a variable number of typenames in a template function, like parameter pack?

我在微控制器上,所以为了避免new operator,我预留了一些内存用于placement new operator call。我想通过向 constexpr 函数提供多种类型来确定该内存的最小大小,该函数将 return 列表中最大的类型。

struct A
{
   int foo;
   int bar[24];
};
struct B
{
   int foo;
   int bar[126];
};


uint8_t objectMem[max_sizeof<A, B>());

是否有类型名称的“参数包”之类的东西?我希望能够附加任意数量的类型作为模板参数。

大致如下:

template <typename... Ts>
constexpr size_t max_sizeof() {
  return sizeof(std::aligned_union<0, Ts...>::type);
}

当然可以。您可以使用可变参数模板:

https://en.cppreference.com/w/cpp/language/parameter_pack

您需要的尺寸可以作为变量模板实现:

https://en.cppreference.com/w/cpp/language/variable_template

最后,你可以考虑使用std::variant API:

https://en.cppreference.com/w/cpp/utility/variant