問題タブ [variadic-templates]
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 つに分割するにはどうすればよいですか? 何かのようなもの:
c++ - 「... ...」トークンの意味は何ですか? つまり、パラメーター パックの二重省略記号演算子
新しい C++11 ヘッダーの gcc の現在の実装を参照しているときに、"......" トークンに出くわしました。次のコードが[godbolt.org 経由で] 正常にコンパイルされることを確認できます。
では、このトークンの意味は何ですか?
編集:質問のタイトルの「......」が「...」にトリミングされたように見えますが、本当に「......」を意味していました。:)
c++ - タプルで for_each を一般化して、可変数の引数を受け入れる
現在、私は持っています:
おそらく可変個引数テンプレートによって、これを一般化して、任意の数のタプル引数を取ることは可能ですか?
編集:
定義できないものを使用する方法は次のとおりです。
編集: 右辺値参照と std::forward を使用するように変更
c++ - この可変個引数テンプレートの例の何が問題になっていますか?
基本クラスは次のとおりです。
派生クラスはこれです:
作成する関数:
そして例:
私はこのエラーを受け取り続けます:
変更しようとしましたが、修正方法がわかりませんでした。
それで、何が問題なのですか?そして、この例を修正する方法は?
c++ - initializer_list を含むパラメーター パックをコンストラクターに展開する
shared_ptr
今後のプロジェクトでかなりの量を使用するつもりなので、( を認識していない) の代用としてstd::make_shared
可変引数テンプレート関数を書きたいと思いました。コンストラクターに. 以下の最小限の例をコンパイルしようとすると、GCC 4.5.2 から次のようになります。spnew<T>(...)
shared_ptr
new
initializer_list
奇妙なことに、 を代入すると同等のエラーが発生std::make_shared
しspnew
ます。どちらの場合も、 an が関係しているときにパラメーターを誤って推測しているようで、誤って空としてinitializer_list
扱っています。Args...
次に例を示します。
これは単なる私の見落としですか、それともバグですか?
c++ - 可変個引数テンプレート関数でのostreamのオーバーロード
最初のパラメーター型でオーバーロードしたい可変個引数関数があります。
ただし、これらの関数は期待どおりに動作しません。
何が起きてる?
オーバーロード解像度が必要な関数を選択しないのはなぜですか?
多くのメタプログラミングなしでこれを行う方法はありますか?(私はそれを回避することができましたstd::is_convertible
が、解決策は私が上に示した単純なコードよりもはるかに大きかったです)。
c++ - クラステンプレートのインスタンス化をその基本クラステンプレートと比較すると、is_same は false を返しますか?
*編集: どういうわけか、コンパイラがasを作成していると思ったので、継承/派生に関係なく、is_same がそれらをどのように評価するかについての私の仮定につながりました。私の悪い:(その後の誤解については申し訳ありません:\ *B
A<int, int, string>
カスタムタイプをチェックするためにいくつかのメタ関数を作成し、この問題に遭遇しましたが、ここで何が起こっているのかわかりません。既知の型の this_t メンバーを、渡されたパラメーターの this_t と比較することで回避できると思いますが、1 番目と 3 番目の is_same テストが失敗する理由を理解したいだけです。
is_same はA<...>
ベースによって差別化されていますか? A<int, int, string>
との明らかな違いは何B
ですか?
c++11 - 可変個引数テンプレート パラメーター パック内の型の位置
私は C++0x を試していますが、発生した次の問題を解決する方法を考えていました。私は可変個引数テンプレートクラスを持っています:
そこにある関数は、 SomeType テンプレート引数に対応する m_storage タプルのベクトルに対して何らかの操作を行うと想定されています (そうでない場合はコンパイル時に失敗します)。どうすればこれを行うことができますか?
私の考えは、パラメーターパックで SomeType のインデックスを見つけてから、 std::get を使用して適切なベクターを取得することでしたが、最初の部分を行う方法がわかりません。
c++ - テンプレートパラメータとして明示的に渡すことなくパラメータパックを推測しますか?
これで C++ 型推論の無知を許してください。ただし、後で内部型をテストできるように、パラメーター パックの定義を持ち歩けるようにしたいと思います。これは可能ですか?何かのようなもの:
おい?非?
c++ - 可変個引数テンプレートを使用して静的配列を作成する
C++ 11 で可変引数テンプレートを使用してコンパイル時に静的配列を作成する方法を示す、stackoverflow に関する回答 (これはもう見つけられないようです) がありました。
再帰的なメタ関数を提供してarray_
、任意の数のパラメーターでインスタンス化することができます。これは、コンパイル時に内部配列にコピーされます。これは、コンパイル時に定数配列を生成するためのメタ関数を作成する便利な方法です。
ただし、1 つの問題は、配列に入力する実際の値を取得するために、クラス テンプレート パラメーターに依存することです。これにより、1 つの大きな制限が生じます。値テンプレート パラメーターとして使用できるのは、整数定数のみです。したがって、この手法を使用してカスタム型の配列を生成することはできません。
この制限を回避する方法を考えようとしましたが、何も思いつきません。この手法を非整数定数で機能させる方法はありますか?