变异模板和类型特征

Rap*_*tor 9 c++ type-traits variadic-templates c++11

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

void*检查很容易,我刚刚这样做了:

static_assert(sizeof...(Args) <= sizeof(PVOID), "Size of types must be <= memsize.");
Run Code Online (Sandbox Code Playgroud)

但是我无法弄清楚如何为std :: is_pod做同样的事情.

这可能吗?

Pet*_*der 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;
};
Run Code Online (Sandbox Code Playgroud)

然后

static_assert( all_pod<Args...>::value, "All types must be POD" );
Run Code Online (Sandbox Code Playgroud)