問題タブ [traits]

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

scala - Scalaでロギングトレイトを定義する際の問題

Scalaでの一般的なロギングパターンは、具象クラスと混合されたロギング特性を使用することであるようです(Liftweb、akkaなどのオープンソースプロジェクトを参照)。

そんな感じ:

これはまさに私が使用しているものですが、このパターンのために問題が発生します。実際、Logging特性が派生したクラスと混合されている場合、Loggerは最も派生したクラスの名前で使用されます。

これが自分自身を明確にするための例です:

このプログラムを実行すると、次のようになります。

それ以外の:

誰かがこの問題の解決策を見つけましたか?

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

scala - コンパイル時に型チェックを行う方法は?

TraversableOnceには、sum含まれている型が である場合にのみ使用できるメソッドがありNumericます (それ以外の場合はコンパイルされません)。これは他のケースでも使用できるのでしょうか (実行時チェックを回避するため)。

特に、2 つのトレイト A と B がある場合です。オブジェクトが A と B の両方fを継承する場合にのみ使用できるメソッドが必要ですが、一方だけを継承する場合はそうではありません。もう作りたくない。両方の特性が継承されていない場合は使用できないようにしたいだけです。trait AB extends A with Bf

編集:@Aaron Novstrupのおかげで解決策

mainでは、コンパイルされb.fません。良い

EDIT 2: 行 [1] を [2] に変更し、@Aaron Novstrup による回答の変更を反映

編集 3: self@Aaron Novstrup による回答の反映変更を使用せずに

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

c++ - allocator_traitsの目的は何ですかC ++ 0xで?

C++0xで使用されるアロケータのメンバータイプを照会するための標準のC++03インターフェイスがないのはなぜですか?メンバータイプが十分でないユースケースは何ですか?

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

c++ - カスタム動作で文字列クラスを実装する

私たちのクラスの1つで、先生は、テンプレートを使用するとクラスの動作をカスタマイズできると言い、次に文字列クラスの例を挙げて、数行のコードでSTLから文字列クラスをカスタマイズできると述べました。 a' と 'z' は同じ、'b' と 'y' は同じ、'c' と 'x' は同じなど。同様に、「A」と「Z」も同じです。

"abc" == "zyx" は真です。
"Abc" == "zyx" は偽です。
"Abc == "Zyx" は真です。

そのような文字列クラスを実装しようと考えていましたが、できません。テンプレートを使用してそのような文字列クラスをどのように実装できますか?

0 投票する
4 に答える
3038 参照

c++ - 純粋にライブラリとして実装されたC++is_lambdaトレイトは不可能ですか?

C++0xラムダについて質問があります。私のコードでは、特定の型がC++0xラムダ式の型であるかどうかを知ることが有益です。例を挙げると:

ラムダ式を関数およびメンバー関数タイプと区別するのはかなり簡単です。ファンクターは別の問題です。

ここで私が目にする問題は、次のC++0x標準に従ったラムダ式の定義です。定義する必要があるのは、パブリックコール演算子だけです。ただし、これはファンクターにも当てはまります。呼び出し演算子の存在をテストするだけでは、ラムダ式とファンクターを区別するのに十分ではありません。さらに、ファンクターのオペレーターが存在しない場合、SFINAEが適用されないため、コンパイラー・エラーが発生します。これはいつ起こりますか?ファンクターの呼び出し演算子はテンプレート化できます。したがって、そのようなコード:

テンプレート化されていない呼び出し演算子を使用してラムダ式とファンクターの両方で機能し、テンプレート化された呼び出し演算子のコンパイラエラーを生成します。

is_lambda < >トレイトは、組み込みのコンパイラ機能を使用してのみ作成できると思います。この特性を実装する方法がわかりますか?

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

c++ - ネストされた型の定数の検出

通常、タイプがであるかどうかを検出する必要がある場合は、constを使用しますboost::is_const。しかし、ネストされた型の定数を検出しようとすると問題が発生しました。constタイプに特化した次のトレイトテンプレートについて考えてみます。

問題は、それがタイプboost::is_constであることを検出していないように見えることです。traits<const T>::referenceconst

例えば:

これは以下を出力します:false false

なぜ出力されないのfalse trueですか?

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

c++ - 特性を使用してpos_typeとoff_typeをint64_tにする方法はありますか?

typedef typename traits_type::off_type off_typeたとえば、のGNU実装のような式など、特性が何であるかを理解しようとしていfstreamます。

この質問は、2/4GBを超えるファイルを操作しているときに出てきました。STLライブラリを適切なフラグを使用して再コンパイルすると、通常、大きなファイルの問題が解決されることがわかりました。

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

scala - 名前付き Scala 自己型はまだ「これ」を隠していますか?

これらの 投稿に取り組んでいると、少なくともある程度は自己タイプを理解していると思いました。

そこで、期待どおりに失敗した例を作成しました。

自己型の「これ」は、B の「これ」の影になっています。奇妙に見えますが、理にかなっています。

その場合、自己型に別の名前を付けるのが賢明に思えます。私はこれを行い、かなり驚いた:

まだ陰になってる???

「ローカル」変数の名前を変更すると、物事がコンパイルされます。これは理にかなっています。

(また、自己型名は、使用する「v」を明確にするためにオプションで使用できます。)

わかった。これは、以下が失敗することを意味しますか?

は?これはどっち?:-(

それで... 自己型に名前を付ける意味はありますか? 「これ」は関係なく影になってしまうようです。

それとも、自己型の「this」が特性の「this」よりも優先されるスコープ規則のエッジケースですか?関連する特性に同じ名前を使用することは避けるべきですか?

0 投票する
4 に答える
6924 参照

c++ - このクラスのC++特性の例

私はしばらくの間C++の高度な機能を使用しておらず、C ++の知識を更新しています。そうは言っても、特性とポリシーベースのプログラミングの概念は、私が頭を悩ませることができなかったものでした。

それを変えたい。私は汎用コンテナを書いています。コンテナが特定の基本クラスから派生したクラスのみを格納するというポリシーを適用したいと思います。これは、ベクターの境界外のアイテムにアクセスしようとすると、コンテナーが(スローするのではなく)無効なオブジェクトを返すためです。

特性を使用して、このジェネリックコンテナをクラス「ContainerItem」のサブクラスのみを含むように制限するにはどうすればよいですか?

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

scala - メソッドチェーンをサポートする Scala トレイトを実装するためのベストプラクティス

クラスにいくつかのプロパティを追加し、メソッドの連鎖を可能にするトレイトを作成したいと考えています。Scala 2.8.1 でテスト済み。

この種の状況で最も一般的な方法は何ですか? (タイプセーフな方法が優先されます)