9

我目前有一个可变参数函数,它接受任意数量的任意类型的参数(duh),但是,我想将类型限制为仅 POD 的类型,并且与 void* 的大小相同或更小。

void* 检查很简单,我只是这样做了:

static_assert(sizeof...(Args) <= sizeof(PVOID), "Size of types must be <= memsize.");

但是我不知道如何对 std::is_pod 做同样的事情。

这可能吗?

4

1 回答 1

12

您可以编写一个元函数来确定是否都是 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" );
于 2011-06-05T15:07:45.027 回答