我目前有一个可变参数函数,它接受任意数量的任意类型的参数(duh),但是,我想将类型限制为仅 POD 的类型,并且与 void* 的大小相同或更小。
void* 检查很简单,我只是这样做了:
static_assert(sizeof...(Args) <= sizeof(PVOID), "Size of types must be <= memsize.");
但是我不知道如何对 std::is_pod 做同样的事情。
这可能吗?
我目前有一个可变参数函数,它接受任意数量的任意类型的参数(duh),但是,我想将类型限制为仅 POD 的类型,并且与 void* 的大小相同或更小。
void* 检查很简单,我只是这样做了:
static_assert(sizeof...(Args) <= sizeof(PVOID), "Size of types must be <= memsize.");
但是我不知道如何对 std::is_pod 做同样的事情。
这可能吗?
您可以编写一个元函数来确定是否都是 POD 类型:
template <typename... Ts>
struct all_pod;
template <typename Head, typename... Tail>
struct all_pod<Head, Tail...>
{
static const bool value = std::is_pod<Head>::value && all_pod<Tail...>::value;
};
template <typename T>
struct all_pod<T>
{
static const bool value = std::is_pod<T>::value;
};
然后
static_assert( all_pod<Args...>::value, "All types must be POD" );