2017-02-23 28 views
19

Bjarne Stroustrupは最近、C++の概念にreportを公開しています。 (7.1節)での例では、「速記テンプレート表記」を使用して、本質的にこのように書き:個人的に私には複数のテンプレート引数を持つC++の概念

void foo1(auto x,auto y);    // x and y may have different types (1) 
void foo2(SomeConcept x,SomeConcept y); // x and y must have the same type (2) 

、これは非常に直感的と思われます。実際には、それぞれの型がSomeConceptを満たす限り、foo2が異なる型の値x、yを受け入れることが期待されます。プログラマは常に明示的に次のいずれか書くことによって自分の意図を指定できることに注意してください:直感的に

template <SomeConcept T> void foo2(T x, T y);     // (3) 
template <SomeConcept T1,SomeConcept T2> void foo2(T1 x,T2 y); // (4) 

を、私は(2)から省略表記は、(4)に相当するので、とより一致することを期待します拘束されていないテンプレートの意味(1)。誰かがこの問題について光を当てて、このデザイン決定の背後にある論理的根拠を説明できますか?

いくつかの発言:私の知る限り

  • 、(C++ 14で)一般的なラムダは、すでに(1)に似た構文を許可します。したがって、一貫性は、(1)一般的なラムダがそれを行うので、異なるタイプの入力変数を受け入れるべきであると指示する。
  • Stroustrupは、このようなテンプレートのコンテキストで古典的な "反復子ペア"を記述しています。しかし、これは非常に弱い議論であると考えています。(i)これはユースケースの1つで、(ii)afaik、C++ 17はジェネリックコードに2つの異なる型を使用させる(イテレータ、センチネル) 。私は現在のコンセプト提案の文脈で簡潔な構文を言及している見つけることができる
+5

それは直観に反すると約束しました。同じコンセプトの異なるタイプが許されている限り、私は本当に*簡略化された構文*を本当に欲しいです。 –

+0

論文は主に作者の意見を代表するものであり、必ずしも委員会の意見ではありません。そして、私は委員会がコンセプトに関して全会一致ではないと思います(あなたは過去の郵送を見ても分かるように)。最終的に何が起こるかはまだ分かりません。あなたが探しているのは、通過した委員会の動きです。 –

+0

コンセプトTS(§8.3.5、p.22)の現行バージョンにも同じルールがあります。http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4641 .pdf –

答えて

2

最古の紙は、§6.2.2で、この理論的根拠を提供N3580、次のとおりです。

我々は2つの引数を何が必要な場合同じコンセプトのタイプ?同じ型でなければなりません

void sort(Ran p, Ran q); 
このようにする意味については

pqを考えてみましょう、それがルールです。デフォルトでは、2つの引数に同じ制約付きのパラメータ名を使用する場合、それらの引数の型は同じでなければなりません。私たちは、(ほとんどの環境で)最も一般的なケースであり、ここでの目的は、最も単純なケースの簡略表記 を最適化することであるため、制約付きのパラメータ名を繰り返し使用することを「同タイプ」とすることを選択しました。また、制約付きのパラメータは型の名前 であり、同じスコープ内の異なる型を参照する2つの型名を持つと、混乱の原因になります。

Tony van EerdとBoton Balloは、この意味を変更する提案を持っています:P0464。紙は現在の意味のサポートに2つの引数を提供し、1サットンらと同様のものを作り、1つの直交:あなたが頻繁に望んでいないことを主張することができ、使用

周波数同じ概念を満たす潜在的に異なる型の2つの引数をとり、2つの型の間に追加の関係を持たない関数です。また、彼らもそこにあるべきで例に簡潔R foo(ConceptName, ConceptName);フォームを使用することを選ぶだろうので、この変更は、下に制約テンプレートの書き込みにテンプレート作成者を奨励することを主張することができ
をチェックする定義と

インタラクションパラメータ型の追加の制約。 under-constrainedテンプレートは、定義チェックをパスしないので、定義が不十分なテンプレートが急増すると、定義チェックの導入が困難になります。


私は、現在の構文の賛成で、他の引数に慣れていないんだけど、あなたがしている場合、その紙に含めるためにトニーとBotondに電子メールを送ること自由に感じています。

+0

あなたの返事をありがとう。私は実際に私の元の質問の後にボットンによって提案を見つけました、そして、私はそれが委員会の支持を得ることを願っています。個人的には、主な議論は 'auto'構文との一貫性ですが、Botondはすでに彼の提案でこれを述べているようです。 –

関連する問題