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

c++ - 明示的なモデル (別名コンセプト マップ) を使用しないコンセプト ベースのオーバーロードの問題を回避する方法

Andrew Sutton による多くの講演や論文で指摘されているように、Concepts Lite 提案には概念ベースのオーバーロード機能があり、同時に概念マップの概念がありません。つまり、テンプレートの引数は概念に対して完全にチェックされますコンパイラ。これを考えると、Siek と Gregor による 2005 年の論文「<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005 /n1798.html" rel="nofollow">明示的なモデル定義が必要です". 要するに、この問題は論文からの次の引用で述べることができます。

そのため、特定の入力反復子の型 (istream_iterator など) は前方反復子として誤分類されます。これには何が危険ですか?一部のアルゴリズムは、Input_iterator と Forward_iterator に基づいてディスパッチします。

(ただし、イテレータ以外にも例があります。)

はい、上記の論文が C++0x の概念を考慮していることは承知していますが、問題は概念の提案よりも「一般的」であるようです。

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

c++ - 概念を定義するときに OR (`||`) は使用できますか?

「複合」概念が で定義されている例はたくさんありますが、 が使用されている例はあり&&ません||。これは、 を使用する意味があるかどうか疑問に思います||||using を使用すると、オーバーロード (アドホック ポリモーフィズム) に似た効果を持つ概念を指定できますが、一連の可能性は閉じられているように思えます。

「プリミティブな」概念のセット C1,...,CN について、次のように書くことは有効ですか?

「複合」概念として?

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

c++ - Concepts TS に定義済みの概念はありますか?

「Concepts lite」はすでに TS として受け入れられており、(実装例) GCC のメイン ブランチにマージされていますSortableRandom_access_range

そのような事前定義された概念はどこで探せばよいでしょうか?

cppreference.comのリストは正確で網羅的なリストですか?

最新の GCC トランク ビルドで使用できますか?



編集 1 : 概念が C++17 に受け入れられないため、C++17 を TS に変更しました。

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

c++ - Can I write a catch clause similar to abbreviated function templates?

At the top of my program, I have an exception handler.
It looks something like this:

As I obtain more an more exception types,
I'd like to take a more generic approach.
How can I apply generic programming to the Handle_All_Exceptions function?


Would something like this be possible in newer versions of C++?

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

c++ - テンプレート クラスがよく知られている型に is_convertible の場合、ファンクタを特殊化する

boost::is_convertibleしたがって、テンプレートの種類が次の場合に特定のコードを適用したいWellKnownType:

このために、ファンクターを使用することを考えました:

次に、次の場合に別のことを行うために、このファンクターを特殊化したいと思いますboost::is_convertible<T, WellKnownType>

次に、ファンクターを使用するように定義を簡単に変更し、変換可能Fooな場合は何かを行い、そうでない場合は何もしないと思います。TWellKnownType

私が知らないのは、この動作を達成する方法です。については知ってBOOST_CONCEPT_REQUIRESいますが、それをテンプレートの特殊化に適用する方法がわかりません。何か助けはありますか?

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

c++ - 概念は、テンプレート キーワードの他のすべてのインスタンスを置き換えることができますか?

C++ の概念を使用して、キーワードのすべての外観をtemplate
(概念自体の宣言を除いて) 置き換えることができますか?

templateテンプレート化されたクラスやテンプレート化された関数など、他の言語構造にキーワードを使用する必要がある理由があるかどうか、興味があります。私が思いつく唯一の例外は、テンプレート化された型エイリアスです。コンパイル時の計算にテンプレートを使用することは、constexpr関数によって置き換えることができます。

私の質問を簡潔にするために、
コンセプト + constexpr の採用では置き換えられない、通常のテンプレート宣言でできることは何ですか?

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

c++ - Concepts-Lite in gcc (TS へのリンク付き)

この質問に対する最近の回答で強調されているように、svn トランクからのビルドがサポートされるようになりました。gccconcepts-lite

同じ質問が最新のTS N4377にリンクしています。編集- 回答には新しい TS があります。

N3580というラベルの付いた役立つ論文を見つけることができます。これは 2013 年のもので、著者は Andrew Sutton、Bjarne Stroustrup、Gabriel Dos Reis です。

N4377 に対する調整のリストは、 N4434 というラベルが付いています。これにより、N4377 論文に提案された 3 つの変更点が示され、その返信ポイントとして Walter E. Brown がリストされます。

これらの論文/技術仕様は似ていますが、それぞれの場合にさまざまな小さな変更があります。

gcc現在実装されているものを見つける簡単な方法はありますか? または実際に、実装する予定はありますか?

副次的な質問として: ConceptClangc++1z の概念に関連する、または同様の名前のプロジェクトはありますか? 2015 年 5 月のメーリング リストへの投稿では、特に次のような意見が寄せられました。

Larisse は、C++0x の取り組みに加えて、概念 ts のためにいくつかの作業を行っている可能性があります。

そのスレッドにはそれ以上の返信はありませんでした。

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

c++ - コンセプトの CRTP でテンプレート テンプレート パラメーターを使用する

concept基本クラスからの継承をテストする を書きたいと思います。

私のクラスは、CRTP を使用して、クラスBaseによってパブリックに継承されます。Derived

このコードは正常に動作します:

テンプレートにしたい場合、問題が発生しましたDerived。これは可能ですか?

明らかな問題Tは、concept宣言に no がないことです。さらに、私は宣言できないと確信しています

conceptにはテンプレート パラメータが 1 つ必要なためです。

編集-セクション 8.3.5、p23ワーキング ペーパー P0121R0リスト。その結果、私が読むところはどこでも、1つのパラメーターしか取ることができず、時代遅れであるか、間違っているか、または注意を怠って読んでいました。編集を終了template<typename T, typename U> concept bool C3 = true;concept

Tここで必要な他のタイプにアクセスできますか? 別の方法はありますか(テンプレートDのタイプがそのタイプの情報を運ぶように思えますが、タイプを特定する必要があるため、T使用することもできません...)using T = typename D<T>::valueType;TD<T>