問題タブ [aggregate-initialization]
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++ - 可変個引数関数呼び出しでの強制的な中括弧の省略
私は2つのPODを持っています
そして、(私が思うに)集約を使用してインプレースでPODを割り当てる可変個の関数
構造体Aに使用すると、remake
テンプレートは期待どおりに機能します
ただし、ブレースの省略なしで B に使用するとエラーが発生します。No instance of template function 'remake' matches argument list. Argument types are: (B*, {...}, int)
(私が思うに)ブレースの省略を伴う B で使用すると機能します
remake(B*, ...) への呼び出しの最初の形式は、ネストされた構造体がデータを取得しているが現在の形式では使用できない場所を明示的に示すことで、意図がはるかに明確になっていると思います。本当に、このエラーは、可変個引数テンプレートと初期化子リストの間の微妙な相互作用 (およびその理解の欠如) の結果である可能性があると感じています。または、私が完全に見逃していた完全に異なる何か。
最初のリメイク(B *、...)フォームで達成しようとしていることは可能ですか?もしそうなら、期待どおりに動作しない原因は何ですか?
追加: 目的
このパターンが必要なアプリケーションは、これらの POD に事前に割り当てられた配列を保持する、メモリを再利用する同種のデータ構造です。外部オブジェクトは、構造体の値を提供して POD の作成を要求できます。その時点で、データ構造は未使用の配列位置を見つけ、これらの値で埋めます。リメイクは次T* create(Args&&... args)
のようになります(コンテナはポインタ安定です)
c++ - c++ 17の集約初期化でコピー省略を実行できますか?
与えられた:
それらにコピーする代わりに、それらから直接初期化できFoo::i
、C++ 17標準を使用できない/できない理由を説明します(おそらくテスト目的のコード)?
Foo::str
1
std::string(...)
できない場合、何部必要ですか?