問題タブ [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 に答える
4075 参照

scala - 形質混合の制限

指定された特性のみを混合できるクラスが必要です。

Scalaでこれを行う方法はありますか?

更新:

クラスを拡張する場合、クライアント プログラマが特定の特性 ( / /と/ / )Heroを混在させるようにクラスを定義したいと考えています。そして、このようなクライアント コードを制限/制約する他の可能性を見つけたいと思います。LawfulLNeutralChaoticGoodNeutralEvilHero

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

scala - 独立した形質の構成

与えられた 2 つの独立した特性:

これらの 2 つの特性が混在するクラスを定義しようとすると、次のようになります。

コンパイラ エラーが発生します。

ここで、T1 と T2 が個別に開発されたとします。したがって、何もオーバーライドしないため、オーバーライドはありません。では、C はどのように定義できますか? このような:

?

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

c++ - 未定義のテンプレート メソッド トリック?

私の同僚は、彼がチームで使用した小さなデザインについて話してくれました。これは、非常に分離された方法で特化できる一種の特性クラスです。

それがどのように機能するのかを理解するのに苦労しました。また、自分のアイデアがまだよくわからないので、ここで助けを求めようと思いました.

ここでは g++、具体的にはバージョン 3.4.2 と 4.3.2 (両方で動作するようです) について話しています。

アイデアは非常に単純です。

1- インターフェイスを定義する

2-クラスを定義し、ソースファイルでこのクラスのインターフェースを特殊化します(そのメソッドを定義します)

3- 使い方も簡単です:

Interfaceforの特殊化を定義した翻訳単位がない場合、これは未定義のシンボルですSpecial

さて、これにはキーワードが必要だと思っていたでしょうがexport、これは私の知る限り、g ++で実装されたことはありません(C ++コンパイラで実装されたのは1回だけで、作成者は時間と労力を考えるとそうしないようにアドバイスしています)。

テンプレートメソッドを解決するリンカーと関係があると思われます...

  • このようなものに会ったことがありますか?
  • それは標準に準拠していますか、それともうまくいくのは幸運な偶然だと思いますか?

私はその構成にかなり戸惑っていることを認めなければなりません...

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

scala - 指定されたクラスで混合された特性のリストを取得する方法は?

そしてより具体的な例:

指定されたクラスで、特性 A を拡張する特性 (0 から多数まで可能) が混合されていることを確認するにはどうすればよいですか?

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

scala - Scala:特性が混在しているクラスの名前を取得する

クラスのインスタンスが与えられると、明らかにその名前を返すことができます。

ただし、この方法では、のインスタンスごとに1回、リフレクションを使用しますAClass。代わりに、クラスごとに同じことを1回行うことはできますか?

頭に浮かぶ解決策の1つは、クラス自体ではなく、コンパニオンオブジェクトに混合することです。

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

c++ - 明示的な特性を持たない整数テンプレート パラメーターの符号付き/符号なしバリアントを取得する

テンプレート パラメータが常に整数型になるテンプレート クラスを定義しようとしています。クラスには 2 つのメンバーが含まれます。1 つは typeTで、もう 1 つはタイプの符号なしバリアント (Tつまり、 if T == int、 then )T_Unsigned == unsigned intです。私の最初の本能はこれを行うことでした:

しかし、うまくいきません。次に、次のように、部分的なテンプレートの特殊化を使用することを考えました。

すべての整数型を部分的に特化UnsignedTypeしている限り、これは機能します。追加のコピー アンド ペースト作業 (マクロの賢明な使用を断念) が少しありますが、実用的です。

ただし、私は今興味があります-型ごとに Traits クラスを手動で定義することなく、整数型の符号付きを決定したり、型の符号なしバリアントを使用したりする別の方法はありますか? それとも、これが唯一の方法ですか?

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

c++ - テンプレートタイプに関するC++デザインの質問

テンプレート化されたクラスがあります

Tの代わりに使用する型については、get_id()、int data()などの多くの要件を満たす必要があります。

明らかに、基本的なタイプ(POD)のいずれも代替可能ではありません。これを提供できる1つの方法は、これらの関数を提供するPODのラッパーを使用することです。これは許容できる方法ですか?

別の方法は、テンプレートを次のように変更することです。

MyContainerClass内で、Tオブジェクトのdata()の代わりにtraits :: data()を呼び出します。専門にしますtraits<int>, traits<const char *>など。

これは良いデザインですか?このようなトレイトクラスを設計するにはどうすればよいですか(完全に静的なメソッドまたは継承を許可します)?または、ラッパークラスは良い解決策ですか?

他にどのような選択肢がありますか?

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

c++ - C++ の特性に関する質問

テンプレート化されたクラスがあります

ほとんどの場合、データの型を置換できるようにコンパイラに依存しています。データ型のオブジェクトでメソッド foo()、goo() を呼び出すので、代用するものはそれを提供する必要があります。

ここで、データ型を int と string に置き換える必要があります。クラスがすでに大きすぎて、各メソッドを特殊化する必要があるため (コードを少し変更するだけで)、特殊化したくありません。

私のオプション(他にあれば教えてください)

1) メソッド foo()、goo() などを実装する int および string のラッパー クラスを提供できます。

2) foo()、goo() を提供するクラスのオブジェクト (これらは私の現在の置換可能なクラスです) で foo() または goo() を呼び出す特性クラスの特性を提供し、これらのクラスを int および string に特化します。

質問

1) 1 対 2 の相対的なメリットは何ですか?

2) 私の特性クラスには静的メソッドがあります。特性クラスに非静的メソッドを含めることはできますか? ほとんどの特性クラスは STL で定数を定義しています。

3) 特性クラスをグローバルにしますか、それともクラス C のテンプレート パラメーターとして渡す必要がありますか?

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

smalltalk - クラスが特性を使用しているかどうかを確認する方法

一部のクラスで使用され、他のクラスでは使用されない特性がある場合、オブジェクトをテストして、それがその特性を使用するクラスのインスタンスであるかどうかを確認するにはどうすればよいですか? 私が欲しいのは、 isMemberOf: または isKindOf: のようなものですが、Traits 用です。

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

c++ - テンプレート化された型の C++ テンプレートの特殊化

BOOST_STATIC_ASSERT を使用して、互換性のない型で現在生成されているモンスターよりも単純なコンパイル エラー メッセージで互換性のない型を使用したことをユーザーに知らせることで、テンプレート化されたコードの一部のユーザーを支援したいと考えています。

例はここで再現するには少し複雑すぎますが、うまくいけば、これで私が望むものの本質を捉えることができます:

私の質問は、その最後の行である「テンプレート テンプレート」をどのようにフォーマットするかです。