21

我只是想知道 C++0x 标准库中是否有任何东西可以用来计算参数包中的参数数量?我想去掉下面代码中的 field_count 。我知道我可以构建自己的计数器,但似乎将其包含在 C++0x 标准库中是一件显而易见的事情,我想确保它不存在 :) 本土计数器实现也很受欢迎。

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

    Entity() : data() {
    }
};
4

2 回答 2

44

是的,您可以使用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);
};

—<em>结束示例]

于 2010-09-02T15:19:43.603 回答
7

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

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;
};
于 2010-09-02T15:03:19.047 回答