問題タブ [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 投票する
2 に答える
1715 参照

c++ - 可変個引数テンプレートで折り畳みを実装する方法

私はほとんど実用的な解決策を持っています。ただし、いくつかの単純なケースのコンパイルに失敗し、エラー メッセージを解読できません。

私の現在の解決策:

これは期待どおりに機能します:

ただし、これはコンパイルに失敗します

std::forward奇妙なことに、コードからすべての右辺値参照を削除すると、正常に動作します

私は何を間違っていますか?
これはコンパイラのバグですか?

0 投票する
4 に答える
4540 参照

c++ - C ++ 11の最小および最大可変個引数テンプレートバリアント?

私は、新しいinitializer_listバリアントがあり、 Variadic Templateバリアントがないという標準を読んminでいますか?maxminmax

したがって、これは問題ありません。

しかし、これはそうではありません:

多くの人は、可変個引数テンプレートがこれを簡単に実装できると期待しているので、がっかりするかもしれません。

VTを使用するのはやり過ぎだminと思いますmax

  • 可変個引数テンプレートは、複数のタイプを処理できます
  • 初期化リストは、すべてのタイプが設計上同じであることを確認します

したがって、ILはこのタスクにはるかに適しています。

私の解釈は正しいですか?

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

c++ - 可変個引数テンプレートと型特性

私は現在、任意の型の任意の数の引数をとる可変個引数関数を持っていますが (duh)、型を POD のみで、void* と同じサイズまたはそれより小さい型に制限したいと考えています。

void* チェックは簡単でした。

ただし、std::is_pod で同じことを行う方法がわかりません。

これは可能ですか?

0 投票する
12 に答える
31135 参照

c++ - Pretty-print std :: tuple

これは、きれいに印刷するSTLコンテナに関する以前の質問のフォローアップであり、非常にエレガントで完全に一般的なソリューションを開発することができました。


この次のステップでは、可変個引数テンプレートを使用して、のきれいな印刷を含めたいと思いますstd::tuple<Args...>(したがって、これは厳密にC ++ 11です)。のためstd::pair<S,T>に、私は単に言います

タプルを印刷するための類似の構造は何ですか?

テンプレート引数スタックのさまざまなビットをアンパックし、インデックスを渡し、SFINAEを使用して、最後の要素に到達したことを検出しようとしましたが、成功しませんでした。壊れたコードであなたに負担をかけないでください。問題の説明は、うまくいけば十分に簡単です。基本的に、次の動作が必要です。

前の質問と同じレベルの一般性(char / wchar_t、ペア区切り文字)を含めることのボーナスポイント!

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

templates - C++0x: 複数の反復子に関数を適用する

関数を複数の反復子にマップする関数を作成しようとしています。それは次のようなものになります

fun_over_variadic_args の関数 Fun をテンプレート化する必要があるという問題が発生します。これは、ラムダにすることも、グローバル名前空間を汚染するローカル関数オブジェクトにすることもできないことを意味します。

誰かがこれに対するより良い解決策を知っていますか?
ありがとう

編集:すべての関数呼び出しをインライン化する可能性を維持するソリューションが優先されるように、可能な限り最大の速度が必要であることに注意してください。

Edit2:匿名の名前空間を使用して、関数 Fun のスコープを 1 つのファイルに制限できることに気付きました。解決策が存在する場合でも、より適切な解決策を知りたいです。

代替ソリューション結果を別の関数に渡す限り、関数 fun を可変引数パックに適用できることがわかりました。したがって、すべての引数に適用したい関数funがある場合、次のようなことができます

代替ソリューションの明確化ただし、これを使用すると、 fun は void を返すことができません

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

c++ - 空のパラメーター パックのテンプレートの特殊化

リスト内の最大数を決定するためにそれ自体を呼び出す可変個引数テンプレート関数があります (テンプレート化された引数によって構成されます)。パラメータ パックが空の場合に特殊化しようとしているので、リストの先頭にある番号を返すことができますが、その方法がわかりません。可変個引数テンプレートとテンプレートの特殊化に慣れてきたばかりですが、これまでのところ次のとおりです。

ただし、これにより次のエラーが発生します。

私もこれを試してみましたが、それが機能するかどうかを確認するためです (ただし、0 未満の数値を返すことができないように、リストに数値 0 をランダムに導入します)。

ただし、上記のエラーに加えて、次のエラーが発生します。

では、これを機能させるにはどうすればよいですか?

-std=c++0xフラグ付きで g++ 4.5.2 を使用しています。

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

c++ - 可変個引数テンプレートテンプレートと完全な転送

オブジェクトジェネレータパターンに関するこの質問は、それを自動化する方法について考えさせられました。

std::make_pair基本的に、のような関数の作成を自動化std::bind1stしたいstd::mem_funので、テンプレートクラスタイプごとに異なる関数を作成する代わりに、すべてのケースを一度に処理する単一の可変個引数テンプレートテンプレート関数を作成できます。この関数の使用法は次のようになります。

この関数を書くことは可能makeですか?これを試しましたが、GCC4.5または4.6では機能しません。

電話をかけようとすると(例make<std::pair>(1, 2)

ここのどこかで構文が間違っていますか?
それとも、これは正しく、GCCは間違っていますか?
それとも、これはC ++ 0xでは基本的に不可能ですか?

[編集]

提案N2555は、これが許可されていることを示唆しているようであり、GCCはGCC4.4でそれを実装したと主張しています

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

c++11 - 可変個引数テンプレートに関する質問

target() テンプレート メソッドを使用して std::functions を比較するための汎用コードを作成しようとしています。これが私の非汎用サンプルコードです:

これは gcc 4.6.1 -std=c++-x で正常にコンパイルおよび実行されます。ただし、次の汎用 cmp 関数をコンパイルしようとすると、コンパイラは解析エラー コードで失敗します。

エラーコードは次のとおりです。

ヒントはありますか?

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

c++ - 可変個引数テンプレートの比較

2つの可変個引数テンプレート引数がある場合、AおよびB、コンパイル時に、のすべてのメンバーの 型が(同じ順序で)のAサブセットの型でもあることをどのように確認できますか?B

考案された例:

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

c++11 - const-correctness を使用した可変長 zip 関数の実装

関数を実装しようとしていzipます。 zipのパラメータは eachwrapped<Ti>で、パラメータごとにTi異なります。

zipはこれらwrapped<Ti>の を取り、wrapped<tuple<T1&,T2&,...TN&>>、つまりtupleそのパラメータへの参照のラップを生成します。参照はconst-ness を保持する必要があります。

zipこれは、一般的には機能しない 1 つのパラメーターを使用した最初の試みです。

の単一バージョンで一般的な可変個のケースを実装する方法はありzipますか?