I was just wondering if there was anything in the C++0x std lib already available to count the number of parameters in a parameter pack? I'd like to get rid of the field_count in the code below. I know I can build my own counter, but it just seems like this would be an obvious thing to include in the C++0x std lib, and I wanted to be sure it wasn't already there :) Home-grown counter implementations are most welcome too.
template<const int field_count, typename... Args> struct Entity {
const tuple<Args...> data;
const array<const char*, field_count> source_names;
Entity() : data() {
}
};
Yes, you can use sizeof...
. From the C++0x FCD (§5.3.3/5):
The identifier in a
sizeof...
expression shall name a parameter pack. Thesizeof...
operator yields the number of arguments provided for the parameter pack identifier. The parameter pack is expanded (14.5.3) by thesizeof...
operator. [Example:template<class... Types> struct count { static const std::size_t value = sizeof...(Types); };
—end example ]
Here's a link that may help you. Sample source from link:
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;
};
来源:https://stackoverflow.com/questions/3628364/count-of-parameters-in-a-parameter-pack-is-there-a-c0x-std-lib-function-for-t