21

パラメータパック内のパラメータの数をカウントするために、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() {
    }
};
4

2 に答える 2

44

はい、使用できますsizeof...。C ++ 0x FCD(§5.3.3/ 5)から:

式の識別子sizeof...は、パラメータパックに名前を付ける必要があります。sizeof...演算子は、パラメーターパックIDに指定された引数の数を生成します。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 に答える