問題タブ [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.

0 投票する
3 に答える
559 参照

recursion - c++0x: Variadic Template テクニック

Variadic Templateを使用してユーザー定義リテラルを定義する準備をしています

GCC 4.7.0 はまだサポートさoperator ""れていませんが、それまでは簡単な関数でこれをシミュレートできます。

残念ながら、私の再帰は間違った方法です。右端の値をシフトせず、左端の値をシフトする良い方法は思いつきません:

もちろん、これはまったく正しくありません。

私の再帰は、一番左の '1' ではなく、一番右の '1' を一番遠くに移動するからです。

それはおそらく私の小さなものですが、私には見えません。

  • 行を修正できます_bin<C>() | _bin<D,ES...>() << 1;か?
  • それとも、すべてを転送し、後ですべてを元に戻す必要がありますか (良くありません)?
  • または、私が見ることができない他の方法はありますか?

更新:再帰を逆に折りたたむことはできませんでしたが、発見しsizeof...ました。動作しますが、完全ではありません。別の方法はありますか?

0 投票する
1 に答える
585 参照

c++ - 関数テンプレートの特殊化を可変個引数テンプレート関数に渡す

関数テンプレートの特殊化のアドレスを通常のテンプレート関数に渡すのに問題はありません。

ただし、同じ特殊化を可変個引数テンプレートに渡そうとすると、次のようになります。

GCCで次のコンパイラエラーが発生します(4.6.1と4.7.0を試しました)。

なぜこれらのエラーが発生するのですか?

0 投票する
7 に答える
730 参照

c++ - Variadic テンプレート コンテナー クラスでテンプレートなしのゲッターは可能ですか?

仮想の可変個引数テンプレート タプル クラスは、私が知る限り、テンプレート パラメーターでゲッターを使用する必要があります。

これは不便であり、エラーが発生する可能性があります。クラスを明示的に指定する必要がないように、クラスを構築する方法があると感じずにはいられません。

私が最初に考えたのは、おそらく何らかの事前計算済みリストの値Get()と比較することによって、型を独自に把握する別のクラスをメンバー関数が返すことでした。typeid(Foo).name()ただし、これはまだ実行前に実行する必要があり、コンパイル時にそのような処理を繰り返す方法がわかりませんでした。

タプルのように、型を明示的に指定する必要のないゲッターを持つ方法はありますか?

0 投票する
1 に答える
1000 参照

c++ - パラメータパックの各要素を変更し、それらからタプルを作成する方法は?

可変引数関数テンプレートで問題が発生しています。パラメーター パックの各要素を調べ、要素をパッケージ化し、パッケージ化されたすべての要素をタプルに詰め込んで返す必要があります。これが私がやりたいことの一般的な考え方です(戻り値の型は単なるプレースホルダーであり、どうなるかわかりません):

何か案は?

0 投票する
6 に答える
797 参照

c++ - 可変個引数テンプレートと新しい

私はこのクラステンプレートを持っています:

これは1つのテンプレート引数では問題なく機能しますが、複数の引数では次のエラーが発生します。

この方法で可変個引数テンプレートを使用するにはどうすればよいnewですか?正しい構文は何ですか?


編集:私の質問は完全に明確ではなかったと思います。私が欲しいのはこれです:


私のコンパイラはclang163.7.1で、このフラグは次のとおり-std=c++0xです。

0 投票する
2 に答える
120 参照

g++ - g++ で可変個引数テンプレートを使用できますか (ただし、他の c++0x 機能は使用できません)。

可変個引数テンプレートはコンパイル時の機能であるため、ABI への影響や実行時の動作の変更はほとんどないと考えられます。これは可能ですか?

特に、boost::mpl::vector と boost::mpl::string のコンパイル時間が短縮されるという利点が必要です。

質問を言い換えます...

c++03 と c++11 のコードをライブラリに分けて混在させることはできますか? つまり、gcc 4.3 と互換性のあるかなりの数のサードパーティ製 c++ ライブラリを使用していますが、gcc 4.7 にも移行しており、可能/合理的な場合は c++11 機能を使用する予定です。それとも、c++11 と c++03 を混在させることは不可能ですか?

0 投票する
2 に答える
1711 参照

c++ - c++11でのメタ関数zipの実装

私は実際に、boost::fusionから使用するごくわずかな操作をサポートする最小限のライブラリを取得できるかどうかを確認しようとしています。

これが私がこれまでに持っているものです...

メタ関数のforeach実装は簡単なので、私も簡単だと思いzipました。どうやら、これはそうではありません。

zipこのメタ関数を任意の数のタイプリストに一般化するにはどうすればよいですか?ここで必要なのは、パラメーターパックのパラメーターパックのようです。どうすればいいのかわかりません。

編集1:

の実装is_equal...

同様のアプローチをとることもできるzipと思います...zipまだ試していませんが、家に帰ったらそうします。

編集2:

これが私が最終的にもっとエレガントに見えたと思ったものです。これは基本的にVaughnCatoのアプローチのバリエーションです。

これは操作として扱わzipfoldます。

0 投票する
1 に答える
622 参照

c++ - std :: min()およびstd :: max()のC++可変個引数テンプレートバージョンに関する考察

、のC++11可変個引数バージョンの実装について考察する必要がありstd::minますstd::max。これが私の2つの選択肢です。ここでは、std::min次のstd::maxように置き換えるだけで同様に実装されstd::minますstd::max

重要な質問は、必要かcommon_type_minどうかです。これにより、min()を1つの引数で呼び出すことができることに注意してください。これは混乱や問題を引き起こす可能性がありますか?

0 投票する
3 に答える
2738 参照

c++ - 可変個引数テンプレートを可変個引数関数に接着する

libc ++でGCCの実装されていない常にインライン化された可変個引数関数をバイパスする試みで、可変個引数テンプレート(snprintf、より正確には* _lバリアントなど)を可変個引数テンプレートでラップして、同様の効果を実現できると思いました。インスタンス化により、可変個引数関数のvarargsが入力され、関数を適切にインライン化できるようになります。問題は、可変個引数テンプレートを作成することについて最初にわからないことです。また、テンプレートの引数を個別の引数に変換する方法も確かにわかりません。

置き換えようとしているコードは次の形式です。

置き換えたいのは、次の形式のものです。

args...に変換できない拡張が原因で、これは機能していtypeませんva_list {aka char*}。方法がない場合は、ハワードを信頼し、1つおよび2つの引数の常にインラインのテンプレートを実装する必要があります。これにより、必要なコードの量が実質的に2倍になります。

編集:おそらくそれをva_listに変換する方法std::tupleargsここで機能しますか?

0 投票する
9 に答える
478 参照

c++ - 最初の n 個の可変引数関数の引数へのアクセス

私は次のコードを持っています:

szコンストラクター引数のジェネリック番号を受け取り、最初の数の引数をメンバー変数に割り当てるコンストラクターを作成したいv

私がやりたいことは、次のようにできるようにすることです:Vec<3> var(1.0,2.0,3.0);