Количество параметров в пакете параметров? Есть ли для этого функция С++ 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;
};