Количество параметров в пакете параметров? Есть ли для этого функция С++ 0x std lib?

Мне просто интересно, есть ли что-нибудь в С++ 0x std lib уже доступное для подсчета количества параметров в пакете параметров? Я хотел бы избавиться от field_count в коде ниже. Я знаю, что могу создать свой собственный счетчик, но похоже, что это было бы очевидным, чтобы включить в С++ 0x std lib, и я хотел быть уверенным, что он еще не был там:) Реализация домашних счетчиков также приветствуются.

template<const int field_count, typename... Args> struct Entity {
    const tuple<Args...> data;
    const array<const char*, field_count> source_names;

    Entity() : data() {
    }
};

Ответ 1

Да, вы можете использовать sizeof.... Из С++ 0x FCD (§5.3.3/5):

Идентификатор в выражении sizeof... должен называть пакет параметров. Оператор sizeof... дает количество аргументов, предоставленных для идентификатора пакета параметров. Пакет параметров расширяется (14.5.3) оператором sizeof.... [Пример:

template<class... Types>
struct count {
    static const std::size_t value = sizeof...(Types);
};

-end пример]

Ответ 2

Здесь ссылка, которая может вам помочь. Пример источника из ссылки:

template<typename... Args> struct count;

template<>
struct count<> {
    static const int value = 0;
};

template<typename T, typename... Args>
struct count<T, Args...> {
    static const int value = 1 + count<Args...>::value;
};