問題タブ [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++ - 可変長文字テンプレートのユーザー定義リテラル
最近、gcc-trunk ソースに「ユーザー定義リテラル」が実装されました。教えてください、可変長文字テンプレートの「ユーザー定義リテラル」を定義できないことを正しく理解していますか?
上。
この式が許可される理由がわかりません:
そして、これは許可されていません:
?
ポイントは何ですか?
上。 これはあいまいさのためですか?
ありがとう。
c++ - C ++ 11:可変個引数関数のパラメーター型の計算
不明なタイプの関数(たとえば、合意された名前を持つ関数を含む構造体の名前)に不透明なハンドルが渡され、その関数に引数を転送する関数を作成するとします。
非可変個引数の場合、単純化のために単一パラメーター関数を考慮すると、これを行うには2つの方法があります。転送関数に任意の型の引数をとらせ、それを使用して転送先関数を呼び出そうとすると、コンパイラーは文句を言います。テンプレートの拡張中に互換性がないことが判明した場合。または、decltypeやその他のさまざまなメカニズムを使用して、転送先関数が予期するパラメーターのタイプを把握し、そのタイプの引数を明示的に要求することもできます。これらに受け入れられている用語があるかどうかはわかりません。そのため、これらを「パススルー」および「前払い」と呼びます。
パススルーメソッドは、任意の数のパラメーターを持つ関数に簡単に一般化されますが、先行メソッドはそうではありません。
問題は、パラメータパックがテンプレート引数としてのみ自立することを許可されておらず、それらを囲んでいるテンプレートでラップした場合、パターンマッチングによってのみ、それらを所定の位置でアンラップおよびアンパックする方法がないことです。
「Upfront」には、自己文書化の改善や型推論のサポートの改善など、いくつかの利点があります(up_front <T>自体をdecltypeすることができます)。可変個引数の場合にそれを機能させる方法はありますか?(もちろん、std :: tupleを使用することもできますが、それはかなり満足のいくものではありません。)
c++ - C ++ 11可変個引数和関数のこの実装の何が問題になっていますか?
このコンパイラエラーが発生します:
このsum.cppの場合:
この関数を宣言する複数の方法を試しました。これはgcc4.6.1の問題ですか?
編集:::std::common_type
私はテンプレートを本当に信頼していないので、これが私が最終的に行ったものです。ただし、まだ問題があります+
。左から右ではなく、右から左にバインドされます。これにより、非可換+
演算子で問題が発生する可能性があります。ただし、修正するのはそれほど難しくありません。
c++ - 可変個引数テンプレートを使用して C++11 でタプル クラスを作成しています。インスタンス変数を操作するにはどうすればよいですか?
したがって、タプルを次のように定義するとします。
Tuple のインスタンス変数を定義してアクセスするには、未定義の数を持つ可能性があることを考慮してください。
c++ - 可変タプルから要素を取得するにはどうすればよいですか?
そこで、可変個引数テンプレートを使用して単純なタプル クラスを作成しました...
実用的なgetメソッド/ヘルパー関数を作成するにはどうすればよいですか? 私が使用している現在のものは、空のタプルで定義された get をコンパイラに期待させます。
コードは次のとおりです。
助けてくれてありがとう!
c++ - C2977: 'std::tuple': テンプレート引数が多すぎます (MSVC11)
Visual C++ 11 で googletest をビルドしようとしていますが、次のコードでエラーが発生します
それはエラーテキストです:
そして、utility
-file の 72 行目があります。
何が問題でstd::tuple
、どのように修正するのですか?
std::tr1::tuple
(ところで: への変更に失敗しましたstd::tuple
)
c++ - 可変個引数テンプレート関数を使用した組み込み多次元配列のサイズ
C ++ 11では、constexprを使用して、コンパイル時に組み込みの1次元配列のサイズ(要素数)を返す関数を作成できます。以下の例:
これは、ARRAY_SIZEおよび同様のマクロimoの優れた代替手段です。
ただし、これは組み込みの多次元配列の最上位次元のサイズのみを返します。
組み込みの2次元配列のサイズを決定するために、次の関数を使用します。
理想的には、任意の次元数の組み込み配列のサイズを返す関数があると非常に便利です。可変個引数テンプレートが役立つと思いましたが、引数が1つしか渡されないため、テンプレートパラメーターを解凍する方法がわかりませんでした。そのような機能は可能ですか?
前もって感謝します。
c++ - 可変個引数テンプレートの部分的な特殊化
次のクラス テンプレート 'X' とその部分的な特殊化について考えてみましょう。
X<int> があいまいであると思われます。なぜなら:
#2 と #3 の両方が #1 よりも特化されていることは明らかであり、#2 と #3 が比較されます。14.5.5.2 に従って、次の #2' と #3' のどちらが専門的かを考えてみましょう。
14.8.2.4 によると、最初のステップは #2' を引数テンプレートとして、 #3' をパラメーター テンプレートとして使用するテンプレート引数推定です。引数の型が X<A1> のみの場合、推定される T1 は A1 で、Types は空です。
2 番目のステップは、#3' を引数テンプレートとして、#2' をパラメーター テンプレートとして使用して実行されます。引数の型が X<A1, Args...> のみの場合、14.8.2.5/9 (この段落は最近 N3281 によって改訂されたことに注意してください) によると、Args は単純に無視され、推定された T1 は A1 であり、引数の推定は成功します。
最後に、双方向の引数推定が成功しました。したがって、#2 は #3 と同じように専門化されています。結論として、 X<int> はあいまいです。
私の質問は、「私の解釈は正しいですか?」
この解釈が正しければ、20.9.7.6/3 の「std::common_type」の定義は不適切です。
common_type<A, B> を使用すると、#3 と #4 が曖昧になります。
注: 最初の例では、GCC 4.7.0 (スナップショット) と Clang 3.0 は #2 を選択します。ただし、これらのコンパイラは信頼性が低いため、N3281 による他の変更には従いません。