問題タブ [c++-concepts]

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 投票する
4 に答える
1583 参照

c++ - C++ テンプレート パラメーターの既定の関数の実装

テンプレートへのパラメーターとして使用される一連のクラスがあります。それらはすべて、いくつかの非公式のインターフェース (別名概念) に準拠しています。

Fooこの例では、パラメータとしてまたはを使用してテンプレートをインスタンス化するとします。そのため、メソッドおよび をBar実装する必要があります。a bc

今、私はこれらのクラスをたくさん持っており、他の関数に関して、関数の 1 つのデフォルトの実装を持ちたいと考えています。

たとえば、デフォルトで とcの差を返したいa()b()します。したがって、このコードをすべてのクラスにコピーする必要なく、 andを定義a()して自動的に実装するだけで十分だと思います。b()c()int c() { return a()- b();}

以前はポリモーフィズム (のデフォルト (仮想) 実装を持つ基本クラスの純粋な仮想関数としてa()とを定義することにより) を使用してこの結果を達成していましたが、パフォーマンス上の理由からこのメカニズムから離れました。b()c()

テンプレート パラメーター クラスを使用してこの種の結果を得る (つまり、既定の実装を 1 回記述する) ための推奨される解決策があるかどうかを知りたいです。

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

c++ - 折り畳み式は、制約の半順序付けでどのように使用されますか?

§14.10.3 N4553 の制約による部分的な順序付け [temp.constr.order]、概念と論理演算子で形成された制約式を部分的に順序付けて、オーバーロードの場合に最適な実行可能な関数を選択するために使用する必要があることを指定しています。しかし、これは論理演算子の折り畳み式を使用した制約式にも当てはまりますか?

たとえば、ここであいまいな過負荷エラーを出す gcc は正しいですか、それとも "c" を出力するコードは有効ですか?

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

c++ - C++ の概念とインターフェイスの違いは何ですか?

私の理解では、C++ ライブラリの概念は C++ にとって、 Closeableのようなインターフェイスが Java にとってのものであるということです (リンクされたソースによると、概念は:名前付き要件のセット)。

  1. そのアナロジーは正しいですか?
  2. C++ インターフェイス(つまり、純粋な仮想メソッドを持つクラス) と C++ ライブラリの概念の違いは何ですか?
  3. 一般に、多重継承による C++ ライブラリの概念の実装は、(多重継承を持たない) Java で複数のインターフェイスを実装することと同等ですか?
0 投票する
1 に答える
215 参照

c++ - C++ Concepts TS に変数と関数の両方の概念があるのはなぜですか?

GCC 6 で実装されている C++1z N4377 Concepts TS ドラフトを見てきましたが、変数の概念と関数の概念という 2 つの異なる種類の概念を持つ目的がわかりません。

関数概念のドラフトの関連部分は [dcl.spec.concept (5.4)] です。

  • { return E; }宣言には、 where Eis a constraint-expression (14.10.1.3)と同等の関数本体が必要です。

変数の概念については、次の段落で [(6.3)] :

  • 初期化子は制約式でなければなりません。

どちらかができて、もう一方ができないことはありますか? そうでない場合、両方を含める理由はありますか?

注: 最新のドラフトP0121R0では、この点に関して何も変更されていません。

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

c++ - 呼び出し可能な引数を知る前に、遅延構成を制約するにはどうすればよいですか?

だから私は GCC6 とその概念の実装で遊んでいて、Haskell Prelude が実験の良いソースになると考えました。Haskell のコア機能の 1 つは関数合成であり、これは私がすぐに取り組む必要があったものです。

できる限り Haskell の構文を模倣して、次の関数を作成しました。

これはうまく機能し、次のようなことができます。

幸いなことに、戻って関数の構成にいくつかの制約を適用することにしましたが、その遅延のためにすぐに問題にぶつかりました。

最初に私はこの概念を書きました:

これは、 Andrew Sutton の origin github プロジェクトにある概念に基づいています。

それで、私は自分の元の機能に適用しようとしました。私が持っている問題は、Gどの引数が渡されるかを知らずに何が返されるかわからないため、G制約することができず、どのパラメーターが与えられているかを知らずに何が返されるかがわからず、それがわからないことです。何が返ってくるかわかりません。GFG

呼び出し可能である限りFunction、構成関数は戻り値を気にしないため、戻り値の型を気にしない新しい概念が必要であると確信しています。Fそして、パラメーターの型と G、したがって F を修正する内部ラムダに制約を課すことができると思いますが、これは、構成不可能な関数を構成でき、呼び出しサイトまでエラーが発生しないことを意味します。これは避けられますか?

多分このようなもの:

これは私ができる最善のことですか (それができる場合でも)?

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

c++ - 関数テンプレートを宣言するための 5 つの新しい構文は何ですか?

このビデオでは、現在の TS バージョンの概念に関するいくつかの問題を特定しています。そのうちの 1 つが次のとおりです。

関数テンプレートを宣言するための 5 つの新しい構文

例を挙げずに。だから私の質問は、彼らは何ですか?