問題タブ [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++ - 可変個引数テンプレートの最初と最後の引数を検出するにはどうすればよいですか?
可変個引数テンプレートの最初と最後の引数を検出するにはどうすればよいですか?
最初の引数については簡単です(sizeof...(T)
0と比較するだけです)が、最後の要素を検出する方法はありますか?
例 :
c++ - pre-c ++ 0x(VS2008)で「可変個引数テンプレート」を実装するにはどうすればよいですか?
Visual Studio 2008を使用していますが、変数引数リストなしで文字列フォーマット関数を実装したいと思います。
pre-c ++ 0x(VS2008)で「可変個引数テンプレート」を実装するにはどうすればよいですか?
ブーストのようにこれを実装するライブラリはありますか?
またはこれを実装する別の方法はありますか?
これが私のサンプルコードです。(もちろん、VS2008を使用しているため、これに準拠することはできません。)
c++ - 可変個引数テンプレートで定義された各クラスのコンストラクターへの引数のパラメーター パックのアンパック
複数のクラス (可変個引数テンプレートで定義) から継承するクラスを作成しようとしています。各クラスについて、引数の同じパラメーター パックを各クラスのコンストラクターに渡します。ただし、クラスの可変個引数テンプレートと引数のパラメーター パックの両方をアンパックできないようです。
私はクラスを持っています:
コンストラクターを使用:
そしてテスト:
gcc は次のエラーで失敗します。
どこ__Policies = T1, T2
明確にするために、私は本質的にやろうとしています:
しかし、T1
と、T2
から推測__Policies
何か案は?gcc は、__Policies
型のリストではなく単一の型として扱っているようです。前もって感謝します!
編集:
gcc/g++ 4.4.5 を使用していることを明確にする必要があります。
Howard Hinnant による提案は、次のことを行うことでした。
ただし、gcc/g++ 4.4.5 では、これによりinvalid use of pack expansion expression
. これが OSX/clang で機能するのは素晴らしいことですが、gcc/g++ でこれを行う方法はありますか?
c++ - 可変個引数テンプレートの謎
正常に動作するコードは次のとおりです。
なぜ count クラス テンプレートを部分的に特殊化する必要があるのか疑問に思っていました。
次のようなことができますか?
しかし、これは機能しませんが、なぜですか?
どんな助けでも大歓迎です:)
編集:回答に従ってソリューションを編集しました。
c++ - 可変個引数テンプレート、コンパイラの謝罪
以前に同様の質問をしたことがありますが、部分的に専門化することで機能させることができることを理解しました。しかし、可変個引数テンプレートの基本を理解するために、このようなコードを変更しました。
エラー: 「申し訳ありませんが、実装されていません: 'args ...' を固定長の引数リストに展開することはできません」
これはバグであり、gcc 4.7.0 で修正されていることを理解しています
したがって、これをすべて修正するには、テンプレートを部分的に特殊化するトリックまたはその他を使用する必要があります。
実際の質問:コードが機能するように部分的な特殊化がここで行う特殊効果を本当に知りたいですか、それとも部分的な特殊化が問題をどのように解決するかを尋ねる必要がありますか? (2 番目のバージョンでバグがヒットしないのはなぜですか?)。動機付けの問題と例を含む説明は非常に役立ちます.
c++ - C++テンプレートは可変個引数ですが静的です
テンプレートスキルをC++でトレーニングしていて、ベクトルクラスを実装したいと考えています。クラスはベクトル次元Nと型Tによって定義されます。次に、型Tの正確にN個の変数を受け取るコンストラクターが必要です。ただし、可変個引数テンプレートにNのみを受け入れるように指示する方法について頭を悩ませることはできません。パラメーター。たぶん、これはテンプレートの特殊化で可能ですか?それとも私は間違った方向に考えていますか?これに関する考え/アイデアをいただければ幸いです。
より多くの考え
私がすでに見た可変個引数テンプレートのすべての例では、再帰を使用してパラメーターリストを「反復」しました。ただし、コンストラクターからコンストラクターを呼び出すことはできないことを念頭に置いています(回答のコメントを読んでください)。では、コンストラクターで可変個引数テンプレートを使用することさえできないのではないでしょうか。とにかく、それは同じ基本的な問題を持つファクトリ関数の使用に私を延期するだけです。
c++ - 可変個引数テンプレートによるテンプレートの特殊化
これはコンパイルされません.2番目のdoStuff宣言は私に与えますerror: template-id ‘doStuff<1u, int, bool>’ for ‘void doStuff(int, bool)’ does not match any template declaration
が、可変引数テンプレート引数を持つ最初の宣言と明らかに一致します.
可変個引数テンプレートを特殊化するには?
c++ - 可変個引数のテンプレート引数を持つこのコンストラクタが一致しないのはなぜですか?
処理パイプラインを実装しましたが、次のように改善したいと思います。
残念ながら、上記の例では次のエラーが発生します。
このエラーの理由は何ですか?
修正方法は?
ちょっとした説明です。上記の例では、最初に unspecified のオブジェクトが作成されpipeline<>( snk )
、次に特殊化されたオブジェクトが作成され、次に特殊化されたオブジェクトが作成されると予想されpipeline< f1 >(b1,snk)
ますpipeline< f1, f2 >(src,b1,snk)
。
ところで、上記の例は 1 つのフィルター ( ) で機能することに注意してくださいpipeline< f1
。
c++ - タプルを「アンパック」して、一致する関数ポインターを呼び出す
さまざまな数の値を保存しようとしてstd::tuple
います。これは、後で保存された型に一致する関数ポインターへの呼び出しの引数として使用されます。
解決に苦労している問題を示す簡単な例を作成しました。
通常、std::tuple
または可変個引数テンプレートに関連する問題については、すべての型を 1 つずつ再帰的に評価するような別のテンプレートを作成template <typename Head, typename ...Tail>
しますが、関数呼び出しをディスパッチするためにそれを行う方法がわかりません。
これの本当の動機はもう少し複雑で、とにかくほとんどがただの学習演習です。別のインターフェイスから契約によってタプルを渡されたので、変更することはできませんが、それを関数呼び出しにアンパックしたいという願望は私のものであると想定できます。これstd::bind
は、根本的な問題を回避する安価な方法として使用することを除外します.
を使用して呼び出しをディスパッチするクリーンな方法std::tuple
、または任意の将来のポイントまでいくつかの値と関数ポインターを保存/転送するという同じ最終結果を達成する別のより良い方法は何ですか?
c++ - Variadic テンプレートの動作がおかしい
何か間違ったことをしているのか、それともコンパイラのバグなのか疑問に思っています。Windows 用 Intel C++ Composer XE 2011 SP1 (または現在最新のアップデート 6) を使用しています。コード内のコメント行を参照してください。