参数包中的参数计数?这有一个C++ 0x std lib函数吗?

Bre*_*ier 16 c++ templates std variadic c++11

我只是想知道C++ 0x std lib中是否有任何东西可用于计算参数包中的参数数量?我想在下面的代码中删除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() {
    }
};
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 36

是的,你可以使用sizeof....从C++ 0x FCD(§5.3.3/ 5):

sizeof...表达式中的标识符应命名参数包.的sizeof...操作者产生的规定的参数包标识符参数的个数.参数包由sizeof...操作员扩展(14.5.3).[ 例如:

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

- 结束例子 ]

  • 注意`sizeof ...(Types)`和`sizeof(Types)...`的区别.后者计算字节数,前者计数类型:) (10认同)

dir*_*tly 5

这是一个可以帮助您的链接.来自链接的示例来源:

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;
};
Run Code Online (Sandbox Code Playgroud)