有没有办法在模板函数中使用可变数量的类型名,比如参数包?
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:
我在微控制器上,所以为了避免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: