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

c++ - ロギング用クラスのモジュール名を宣言

現在、ログ ライブラリにいくつかの機能を追加しています。これらの 1 つは、そのクラス内から書き込まれるすべてのログ メッセージに自動的に付加されるクラスのモジュール名を宣言する可能性です。ただし、モジュール名が指定されていない場合は、先頭に何も追加されません。現在、名前を返す静的関数を持つ特性クラスを使用しています。

このクラスは、ヘルパー マクロを使用して定義できます。欠点は、モジュール名をクラスの外で宣言する必要があることです。クラス内でできるようにしてほしい。また、プリプロセッサ ディレクティブを使用してすべてのロギング コードを削除できるようにしたいと考えています。SFINAE を使用すると、テンプレート引数に特定のメンバーが含まれているかどうかを確認できますが、テンプレートに慣れていない他の人がコードを維持する必要があるため、より簡単なソリューションを探しています。何もない場合は、特性アプローチに固執します。

前もって感謝します!

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

actionscript-3 - AS3 での Mixin または Trait の実装?

AS3 でMixin/Traitスタイル システムを実装する方法についてのアイデアを探しています。

多数のクラスをまとめて単一のオブジェクトに構成できるようにしたいと考えています。もちろん、これは AS3 の言語レベルの機能ではありませんが、プロトタイプ ベースの手法や、AsMock がその機能を実装するために使用すると思われるバイトコード ハッキングを使用してこれを行う方法があることを願っています。

既存の Java の例はQi4Jであり、ユーザーは Qi4j フレームワークがメタデータ タグと規約によるコーディングに基づいて実装するインターフェイスを定義します。

Mixin/Trait の概念を AS3 内で機能させる方法について何かアイデアはありますか?

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

c++ - 非推奨のバインダーとC++0xラムダの使用

C ++ 0xは、genericなどの古いバインダーの使用を廃止しbind1stましbind2ndstd::bind。C ++ 0xラムダはとうまくバインドしますが、デフォルトではラムダには、、、、、などのネストされたtypedefがないため、従来のbind1stおよびstd::bindbind2ndとはバインドしません。したがって、必要なtypedefが公開されるため、ラムダを古いバインダーにバインドする標準的な方法として役立つと思いました。argument_typefirst_argument_typesecond_argument_typeresult_typestd::function

ただし、std::functionこのコンテキストでの使用は、インスタンス化中に関数型を詳しく説明する必要があるため、使用するのが困難です。

の便利なオブジェクトジェネレータが見つかりませんでしたstd::function。のようなものstd::make_fuctionがあればいいのにと思います。そのようなものは存在しますか?そうでない場合、ラムダを古典的なバインダーに結合する他のより良い方法はありますか?

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

c++ - C++0x コンパイラ間でのラムダ特性の不一致

2 つのコンパイラ (g++ 4.5、VS2010 RC) の間で、ラムダとクラス テンプレートの部分的な特殊化を一致させる方法に矛盾があることがわかりました。タイプの特徴を抽出するために、ラムダのboost::function_typesのようなものを実装しようとしていました。詳細については、これを確認してください。

g++ 4.5 では、operator()ラムダの型は独立した関数 (R (*)(...)) の型のように見えますが、VS2010 RC ではメンバー関数 (R ( C::*)(...))。問題は、コンパイラの作成者が好きなように自由に解釈できるかどうかです。そうでない場合、どのコンパイラが正しいですか? 以下の詳細を参照してください。

このプログラムは g++ 4.5 と VS2010 の両方でコンパイルされますが、インスタンス化される function_traits はコードに示されているように異なります。

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

c++ - トレイトからconstまたはnon-const参照型を取得します

void(* func)(T)型とfuncの引数argの関数をとるファンクターFを書いています。

次に、ファンクターFはargを使用してfuncを呼び出します。Fはargをコピーせず、参照として渡すだけにします。しかし、Tが参照になる可能性があるため、単純に「void F(void(* func)(T)、T&)」と書くことはできません。だから私はTの適切な参照型を取得することを可能にする特性を書き込もうとしています:

私はこのようなものを思いつきます:

たとえば、これは機能しません

エラーの発生:「voidF(void(*)(T)、typename type_op :: valid_ref_type)[with T = int]'</ p>

この特性を機能させる方法は?

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

c++ - c++でis_same_typeタイプの特性を実装するプログラム

HI誰かがc++でis_same_typeタイプの特性を実装するためのサンプルプログラムを提供できますか?

0 投票する
5 に答える
1261 参照

c++ - 特性によってインスタンス化されたクラス メンバー関数 [ポリシー、実際]

これを理解できないとは言いたくないのですが、これを理解することはできません。Stack Overflow でググって検索したところ、何も表示されませんでした。

質問の抽象的で、おそらく非常に曖昧な形式は、メンバー関数をインスタンス化するために特性パターンを使用するにはどうすればよいですか? です。 [更新: ここで間違った用語を使用しました。「特性」ではなく「ポリシー」であるべきです。特性は既存のクラスを記述します。ポリシーは合成クラスを規定します。]この疑問は、私が 10 年以上前に書いた一連の多変量関数オプティマイザーを最新化するときに出てきました。

オプティマイザーはすべて、現在の最適なポイントから離れたパラメーター空間を通る直線パスを選択し (「更新」)、その線上でより適切なポイントを見つけ (「ライン検索」)、「完了」をテストすることによって動作します。 "条件、および実行されていない場合は繰り返します。

更新、行検索、およびおそらく完了したテストなどを行うには、さまざまな方法があります。ミックス&マッチ。異なる更新式には、異なる状態変数データが​​必要です。たとえば、LMQN の更新にはベクトルが必要であり、BFGS の更新には行列が必要です。勾配の評価が安価である場合は、ライン検索でそうする必要があります。そうでない場合は、関数評価のみを使用する必要があります。一部の方法では、他の方法よりも正確なライン検索が必要です。これらはほんの一例です。

元のバージョンでは、仮想関数を使用していくつかの組み合わせをインスタンス化します。一部の特性は、実行時にテストされるモード ビットを設定することによって選択されます。うん。#define で特性を定義し、#ifdef とマクロでメンバー関数を定義するのは簡単です。しかし、それは20年前のことです。奇抜な現代的な方法を理解できないのは私を悩ませています。

変化する特徴が 1 つだけある場合は、奇妙に繰り返されるテンプレート パターンを使用できます。しかし、それを特性の任意の組み合わせに拡張する方法はありません。

などを使ってやってみboost::enable_ifました。特化した状態情報は簡単でした。this関数を実行することはできましたが、パラメーターとして -pointerを持つフレンド以外の外部関数に頼るしかありませんでした。関数を友達にする方法、ましてやメンバー関数を作る方法さえ理解できませんでした。コンパイラ (VC++ 2008) は、常に一致しないと不平を言っていました。私は「スフィナエ、馬鹿野郎!」と叫びました。しかし、バカはおそらく私です。

おそらくタグディスパッチが鍵です。私はそのことにあまり深く入っていません。

きっと可能ですよね?もしそうなら、ベストプラクティスは何ですか?

更新:これを説明する別の試みがあります。ユーザーがカスタム オプティマイザーの注文 (マニフェスト) に記入できるようにしたいのですが、中国語のメニューから注文するようなものです - 列 A から 1 つ、列 B から 1 つなど..ウェイター、列 A から (アップデーター) 、コレスキー分解ソースで BFGS を更新します。列 B (line-searchers) から、eta が 0.4、rho が 1e-4 の 3 次補間ライン検索を行います。等...

更新: わかりました。これが私が行った遊びです。しぶしぶ提案するのは、完全に間違ったアプローチだと思うからです。vc++ 2008 では問題なく動作します。

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

scala - Scalaの特性と暗黙の変換の混乱

次の行は、Scala REPL(2.7.7)で手動で入力すると機能します。

ただし、それを使用してファイルをコンパイルしようとすると、次のエラーが発生します。

なんで?

ありがとう!

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

perl - Moose で基になる属性が変更されたときに遅延構築された属性を再構築する

属性を持つMooseクラスがありlazy_buildます。その属性の値は、別の (非遅延) 属性の関数です。

必要な属性の値が 42 のクラスを誰かがインスタンス化したとします。次に、42 の関数として計算される lazy 属性を要求します。次に、神経質になって最初の属性を変更します。

遅延属性は既にビルドされているため、ビルダーが再度呼び出されることはなく、遅延属性は古くなっています。

必要な属性に「ダーティ」フラグを維持し、レイジー フラグのアクセサがダーティ フラグをチェックし、必要に応じて再構築するという解決策があります。

ただし、これは大変な作業のようです。トレイトを使用するなど、Moose 内でこれを処理する方法はありますか?

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

scala - トレイトの実装

次のような特性がある場合:

クラスは 2 つの方法で記述できます (C1 と C2 は同じ機能を追加します)。

どのバリアントが優れていますか(効率的ですか)?