Количество параметров в пакете параметров? Есть ли для этого функция C ++ 0x std lib? - PullRequest
15 голосов
/ 02 сентября 2010

Мне просто интересно, есть ли что-нибудь в библиотеке C ++ 0x std, уже доступной для подсчета количества параметров в пакете параметров?Я хотел бы избавиться от field_count в коде ниже.Я знаю, что могу создать свой собственный счетчик, но кажется, что это было бы очевидной вещью для включения в C ++ 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() {
    }
};

Ответы [ 2 ]

35 голосов
/ 02 сентября 2010

Да, вы можете использовать sizeof....Из C ++ 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);
};

- конец примера ]

5 голосов
/ 02 сентября 2010

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

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;
};
...