問題タブ [class-factory]

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

c++ - Windows での静的オブジェクトの初期化 (クラス ファクトリの場合)

クラスが自分自身を登録しているクラス ファクトリ (Visual Studio 2008) を作成しています。クラス ファクトリはシングルトンであり、クラスは次のように自分自身を登録します。

Factory.h で

SomeRegisteredClass.cpp で

ただし、実行時に Register のコンストラクターが呼び出されることはないため、SomeClass が登録されることはありません。SomeRegisteredClass.cpp 内のものを最適化する最適化が進行中であると思われます (SomeClass はコード内の他の場所では直接使用されず、そのインターフェイスを介してのみ使用されるため)。それが可能で、どうすれば無効にできますか。

Edit1: このすべてのものは、実行可能ファイルにリンクされている静的ライブラリにコンパイルされます。

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

c++ - パラメーターを持つコンストラクターのクラス ファクトリを作成できますか?

オブジェクトを動的に作成するためにクラス ファクトリを使用しています。シンプルにするためにこの回答を使用しました(そしてQtを使用しているため)。

しかし、コンストラクターに引数を追加する必要があることに気付きました

それ以外の

参照された回答のコードの場合:

クラスを登録しました

必要に応じて、私は電話しました

コンストラクターの引数を表すために、クラス ファクトリに追加の引数を追加しようとしていますが、私の試みはすべてエラーになります。

なぜ私はそれが必要なのですか: 単純なケース:

  • 新しいオブジェクトを作成 - デフォルトを設定します。特定のオブジェクトでは、ファイルからデータをロードする必要があるため、ファイルを開くダイアログが必要です。

  • オブジェクトの読み込み - ファイル情報を含むオブジェクトのファイル名を含むデータを入力します

「ロード」機能を呼び出すには、オブジェクトが存在している必要があります。つまり、新しいオブジェクトを作成すると、必要がないにもかかわらず、ファイルを開くダイアログが表示されます。

私が見る回避策は、コンストラクターの後にセットアップ関数を配置することです。しかし...つまり、オブジェクトの構築には常に2つの関数呼び出しが必要であり、設計が悪いようです。

そのため、次のような単純な呼び出しを使用してクラスを登録して呼び出す方法を探しています

それは可能ですか、どうすればできますか?

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

c# - 限定クラスファクトリーデザインパターン

C# で次のことを達成するエレガントな (または任意の) 方法はありますか?

  • ユーザーが の「追跡されていない」インスタンスを作成するのを防ぐために、直接インスタンス化 (非公開の構築) を許可しないクラスItemBase(さらに に派生可能) を用意しましょう。Item1Item2Item*
  • Managerインスタンス (複数のインスタンスを許可)のみを作成および提供できる非静的クラスを用意しますItem*(生成されたインスタンスを追跡し、追加の作業を行うため)。
  • オプションの要件があります。Managerインスタンスは、マネージド インスタンスの非パブリック メンバーを操作したいと考えています ( が ofになるのとItem同様です)。ManagerfriendItem*
  • Managerが の派生であることを強要されなければいいのですがItem*
  • 反射が少ないのがいいですね。

ノート:

  • 可能であれば、これを、特定の問題の解決策を最善かつエレガントな方法で実装する方法を考えるプロセスから生じる質問と考えてください。いいえ、ソースはありません。はい、すでにいくつかのバリエーションを試しましたが、どれも私のニーズを満たしていませんでした。ありがとうございました。

  • 私の知る限り、受け入れられるfriend代替手段はありません (どれでも良いinternalInternalsVisibleToAttribute思われます)。そのため、ItemBase「特別な」(しかし公開されている) 変更メソッドを提供するだけであり、ユーザーはこれらのメソッドがユーザー向けではないことに注意する必要があります:o (

  • 私はこのソリューションが好きですが、それを使用して複数のManagerインスタンスを許可する方法を発明することはできません。

0 投票する
0 に答える
208 参照

c++ - GoogleTest で動的クラスの作成/破棄をテストするジェネリック クラス ファクトリを作成しますか?

Google Test をいじっていたときに、ちょっとした難問にぶつかりました。

外部システムからのイベントに基づいて、システム内を行き来するエンティティと対話する新しいクラスを生成する C++ クラスを単体テストしたいと考えています。イベント ディスパッチャと特殊なエンティティのクラスの作成方法はすべて、私が制御または変更できないライブラリによって決定されます。ライブラリの設計では、エンティティへの接続方法に関する特定のパラメーターをクラス コンストラクターに渡す必要があり、そのエンティティーが存在しない場合、コンストラクターはスローします。これらのクラスは、その存在とイベントに応じて使用されるため、メソッドを使用できるようにしたいと考えてEXPECT_CALL()います。これには明らかに、実際のクラスではなくモッククラスをモックまたはオーバーロードして返すことができるファクトリが必要です。

既にイベント モニターを IClass に抽象化して、そのモックを作成し、制御された方法でイベントをフィードできるようにしました。一連の Construct[x] メソッドを持つファクトリを作成しました。各メソッドはstd::shared_ptr、特定の IClass の新しいインスタンスの を返します。これは問題なく動作し、この方法でテストしたいクラスで完全なテスト スイートを実行できます。適切なクラス破壊を含みます。

ただし、工場をより一般的なものにしたいと考えており、思いつくのは次のとおりです。

クラスファクトリを使用するテストしたいクラスは、テストクラスのコンパイル時にすでにオブジェクトファイルにコンパイルされているため、上記のテンプレート化されたファクトリは明らかに機能しません。テンプレートは既に評価されており、テスト クラスでのテンプレートの特殊化の形式は、テストしたいクラスからの Construct 呼び出しを再ルーティングしません。

したがって、私の質問は次のとおりです。このための汎用ファクトリを作成することはまったく可能ですか? もしそうなら、どうすればいいですか?

助けてくれてありがとう!

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

r - ifelse() を使用した double for ループが R で正しく機能しない

データフレームの各列を実行して、「不明な」値を NA に変換しようとしています。次のコードを試しました:

ただし、値は変更されていません。変更しようとしている列は要因であるため、次のことも試しました。

無駄に。エラーは発生せず、コードは問題なく実行されているようです。値のみが「不明」のままです。