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 に答える