問題タブ [parameter-pack]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++11 - フォールド式を使用せずにテンプレート パラメーター パックの値を正しい順序で処理する最も簡単な方法は何ですか (C++11)
次のコードを C++11 にバックポートしたいと思います。
パラメーター パック I の各値に対する 'bar' の呼び出しの順序は重要です。fold-expression がコンマ演算子を使用しているため、上記の C++17 実装で機能していると思います。
私は最初、明示的に再帰的な実装を行いました。
これは機能しているように見えますが、g() には 2 つの実装が必要です。単一の関数に取り込もうとしているときに、パック展開が make_tuple で発生することを読み、これが機能すると考えました。
残念ながら、これは実行順序を保証するものではありません。実際、gcc では実行順序がまったく逆になります。または、ブレース初期化リストを使用できます。
これは gcc で順序を保持しているように見えますが、これが単なる偶然かどうかはわかりませんでした。
したがって、具体的な質問は次のとおりです。
- h2 の実装は正しい実行順序を保証しますか?
- 私が見逃した代替の実装はありますか?
c++14 - パラメーターのない関数のテンプレート パックを再帰的にアンパックする
渡されたすべての型のサイズの合計を差し引くことができる、可変個引数テンプレート型パックを使用して構造体テンプレートを作成しようとしています。
以下に簡単な例を示します。実際のコンテキストでは、計算されたサイズを使用してさらにメンバー オブジェクトを作成します。
引数リストに関しては、この再帰的なパラメーター アンパック アプローチに慣れており、これは引数のない関数や明示的なテンプレート指定でも同様に機能すると想定していました。ただし、clangでコンパイルすると次のエラーが発生します
そのため、最後の再帰反復がここでは機能しないように見えます。なぜコンパイラーが最も明白な選択肢を単純に選択しなかったのかはわかりません: テンプレート型が 1 つしかないもの – 実際のテンプレート引数があった場合と同じです。関数に渡されます。
では、これをコンパイルして希望どおりに動作させるにはどうすればよいでしょうか?
c++ - テンプレート パラメーター パックで共用体を初期化する
ECS とデータ指向モデルを使用してエンジンを作成しています。呼び出しごとにキャッシュが破棄されるのを避けるために、継承と動的ディスパッチを回避しようとしていupdate()
ます。私が思いついたのはこれでした:
次にroom
、メモリ プールを介してすべてのシステムとコンポーネントを保持するクラス (マネージャ) を作成します。問題は、
コンパイラが不平を言う部分:
楕円を動かそうとしましたが、効果がありませんでした。私が本質的にやろうとしているのは、すべてのフレームでテンプレートと動的ディスパッチの両方を使用しないようにすることですが、初期化にはテンプレートが必要です。基本的な構文が間違っていますか? 私は何かを完全に見逃していますか?私はデータ指向のパラダイムに慣れていないので、喜んでアドバイスをいたします。最小限の再現可能な例: https://godbolt.org/z/zGAfXS