3

新しい演算子の利点について疑問に思いますsizeof...(演算子と混同しないでくださいsizeof)。Webを検索したところ、次のような例がいくつか見つかりました。

template<class... ArgTypes>
std::size_t GetLength()
{
    return sizeof...(ArgTypes);
}

例は例示ではないと思います。

sizeof...非常に役立つことを説明する実際の例はありますか?

更新:

ここから、もっと意味があると思われる別の例を見つけました。

template<class ...A> void func(A ...args){
   typedef typename common_type<A...>::type common;
   std::array<common, sizeof...(A)> a = {{ args... }};
}

template<typename... A> int func(const A&... args)
{
  boost::any arr[sizeof...(A)] = { args... };
  return 0;
}
4

3 に答える 3

4

これがあなたができることの私の例ですsizeof...

/// Transform a single boolean value into a number
constexpr unsigned int boolCode(bool value) {
    return value;
}

/// Transform a sequence of booleans into a number
template <typename... Args>
constexpr unsigned int boolCode(bool value, Args... others) {
    return value << sizeof...(others) | boolCode(others...);
}

この便利な関数は、次のように switch ステートメントで使用できます。

switch (boolCode(condition1, condition2, condition3)) {
case boolCode(false,false,false): //...
case boolCode(false,false,true): //...
case boolCode(false,true,false): //...
case boolCode(false,true,true): //...
case boolCode(true,false,false): //...
case boolCode(true,false,true): //...
case boolCode(true,true,false): //...
case boolCode(true,true,true): //...
}
于 2013-02-21T12:17:03.740 に答える
2

おそらく、コメントで STL と CornedBee の間の議論を読みたいと思うでしょう: http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/Stephan-T-Lavavej-Core-Cpp -8/n#コメント

重要なビット:

ただし、sizeof... は単なるシンタックス シュガーではありません。手動で実装された sizeof... は線形の「ランタイム」(インスタンス化の数) を持ちますが、組み込みの sizeof... は O(1) です。(変数パックの大きな問題の1つは、引数パックへのランダムアクセスがないため、コンパイルが非常に遅くなる傾向があることです。一部の人(Boostからだと思います)がこれを研究し、Boost.Tuple(プリプロセッサ-powered non-variadic tuple) は、単純な variadics ベースのバージョンよりも大幅に高速にコンパイルされます。)

于 2013-02-21T10:50:28.923 に答える
-3

C ++に導入された最初の最も重要な理由sizeofは、C ++に存在していたためです。ここでは、割り当てるメモリの量を知る必要がありmalloc( n * sizeof(struct MyClass) )ます。C ++では、割り当てと初期化が別々である同様のケースで使用されます。たとえば、コンテナクラス、バリアント、またはクラスなどです。

また、関数オーバーライド解決と組み合わせて、テンプレートメタプログラミングで使用されることも知られています。次のようなもの:sizeof( discriminatorFunction( someArgs ) ) == sizeof( TrueType )

于 2013-02-19T15:12:21.457 に答える