問題タブ [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.
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 の概念を考慮していることは承知していますが、問題は概念の提案よりも「一般的」であるようです。
c++ - 概念を定義するときに OR (`||`) は使用できますか?
「複合」概念が で定義されている例はたくさんありますが、 が使用されている例はあり&&
ません||
。これは、 を使用する意味があるかどうか疑問に思います||
。||
using を使用すると、オーバーロード (アドホック ポリモーフィズム) に似た効果を持つ概念を指定できますが、一連の可能性は閉じられているように思えます。
「プリミティブな」概念のセット C1,...,CN について、次のように書くことは有効ですか?
「複合」概念として?
c++ - Concepts TS に定義済みの概念はありますか?
「Concepts lite」はすでに TS として受け入れられており、(実装例) GCC のメイン ブランチにマージされています。Sortable
Random_access_range
そのような事前定義された概念はどこで探せばよいでしょうか?
cppreference.comのリストは正確で網羅的なリストですか?
最新の GCC トランク ビルドで使用できますか?
編集 1 : 概念が C++17 に受け入れられないため、C++17 を TS に変更しました。
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++?
c++ - テンプレート クラスがよく知られている型に is_convertible の場合、ファンクタを特殊化する
boost::is_convertible
したがって、テンプレートの種類が次の場合に特定のコードを適用したいWellKnownType
:
このために、ファンクターを使用することを考えました:
次に、次の場合に別のことを行うために、このファンクターを特殊化したいと思いますboost::is_convertible<T, WellKnownType>
。
次に、ファンクターを使用するように定義を簡単に変更し、変換可能Foo
な場合は何かを行い、そうでない場合は何もしないと思います。T
WellKnownType
私が知らないのは、この動作を達成する方法です。については知ってBOOST_CONCEPT_REQUIRES
いますが、それをテンプレートの特殊化に適用する方法がわかりません。何か助けはありますか?
c++ - 概念は、テンプレート キーワードの他のすべてのインスタンスを置き換えることができますか?
C++ の概念を使用して、キーワードのすべての外観をtemplate
(概念自体の宣言を除いて) 置き換えることができますか?
template
テンプレート化されたクラスやテンプレート化された関数など、他の言語構造にキーワードを使用する必要がある理由があるかどうか、興味があります。私が思いつく唯一の例外は、テンプレート化された型エイリアスです。コンパイル時の計算にテンプレートを使用することは、constexpr
関数によって置き換えることができます。
私の質問を簡潔にするために、
コンセプト + constexpr の採用では置き換えられない、通常のテンプレート宣言でできることは何ですか?
c++ - Concepts-Lite in gcc (TS へのリンク付き)
この質問に対する最近の回答で強調されているように、svn トランクからのビルドがサポートされるようになりました。gcc
concepts-lite
同じ質問が最新のTS N4377にリンクしています。編集- 回答には新しい TS があります。
N3580というラベルの付いた役立つ論文を見つけることができます。これは 2013 年のもので、著者は Andrew Sutton、Bjarne Stroustrup、Gabriel Dos Reis です。
N4377 に対する調整のリストは、 N4434 というラベルが付いています。これにより、N4377 論文に提案された 3 つの変更点が示され、その返信ポイントとして Walter E. Brown がリストされます。
これらの論文/技術仕様は似ていますが、それぞれの場合にさまざまな小さな変更があります。
gcc
現在実装されているものを見つける簡単な方法はありますか? または実際に、実装する予定はありますか?
副次的な質問として: ConceptClang
c++1z の概念に関連する、または同様の名前のプロジェクトはありますか? 2015 年 5 月のメーリング リストへの投稿では、特に次のような意見が寄せられました。
Larisse は、C++0x の取り組みに加えて、概念 ts のためにいくつかの作業を行っている可能性があります。
そのスレッドにはそれ以上の返信はありませんでした。
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;
T
D<T>