問題タブ [loki]
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.
c++ - c++: Loki StrongPtr は安全ではないように見えますが、そうですか?
私は現在、ブースト共有ポインタと弱いポインタ、さらにロキスマート ポインタとストロング ポインタなどの最も人気のあるスマート Ptr 実装を検討しています。これは、自分自身を実装したいからであり、理解していることから、ロキ ストロング ポインタは安全ではないように見えますが、むしろ私は理解が間違っているので、安全かどうか議論したいと思います。安全ではないと私が考える理由は、私が知る限り、弱いポインター (つまり、false が弱いことを示す StrongPtr) を十分に注意して処理しないためです。
たとえば、逆参照関数:
マルチスレッド環境では、弱いポインターはいつでも無効化される可能性があるため、この関数は無効化された Ptr を返す可能性があります。
私の理解では、逆参照しているptrのstrongPtrインスタンスを作成して、途中で無効にならないようにする必要があります。それが、最初に shared_ptr インスタンスを作成せずにboostでweak_ptrを逆参照できない理由でもあると思います。Lokis StrongPtr Constructor は、私が思うのと同じ問題に苦しんでいます。
これは問題ですか、それとも src の読み方が間違っていますか?
c# - Loki::Typelist with Hierarchy Generator に類似した C# Typelist
私は Loki の C++ HierarchyGenerator が大好きで、C# でも同じことをしたいと思っています。
最終的に欲しいのは、与えられた型リストの引数ごとに仮想関数を持つクラスです。
変換したい C++ コード:
C#で。Loki に慣れていない場合、上記の FooSend クラスはデフォルトで次のようになります。
ただし、新しい TList が指定されると、TList のタイプに基づいて別の階層になります。
また、Loki に GenLinearHierarchy が存在する場合は興味があります。
私はいつでも言語間の翻訳を試みることができましたが、私は C# を初めて使用し、自分の仕事をしたいだけで、テンプレートとジェネリックの微妙な違いを学びたくないので、それを試すことはあまり好きではありません。
c++ - Loki の SetLongevity 関数は安全ではないように思えますが、そうですか?
Loki の SetLongevity 関数で使用される「pTrackerArray」というグローバル変数があります。
pTrackerArray の宣言:
SetLongevity の定義:
SetLongevity で pTrackerArray をそのまま使用するのはスレッドセーフですか?
c++ - Loki functor - メモリの問題
私のプロジェクトでは、単純なイベント システムに Loki::Functor を使用しています。イベントには、いくつかのパラメーターを受け取るハンドラー関数があります。この場合は と呼びPrintEventString
ます。キューに入れるには、イベント ハンドラーに同じプロトタイプ (私の場合はvoid func(void)
. したがってCreateEvent
、ハンドラーを受け取り、そこからファンクターを作成し、パラメーターをバインドして、void f (void)
プロトタイプを作成します。functor を呼び出す前にデータ ソースを破棄するまで (2 番目の例、一時的に作成された文字列)、すべてがうまくいきます (ローカル変数に格納された文字列を使用する最初の例)。コードは次のとおりです。
これはコンパイル、実行されますが、2 番目のテストは機能せず、valgrind は一連のエラーをスローします。
ファンクタが渡されたオブジェクトへの参照のみを取得すると思われます。オブジェクトは(一時的に作成されたものとして)破棄され、問題が発生します。しかし、ここで何が間違っているのでしょうか? 環境を破壊できるように、バインディングは環境の一部を保存するために使用されると思いました (Andrei が彼の本で説明しているように)。
c++ - Modern C++ Design のサンプル コード
「Modern C++ Design」を読み
ましたが、そのサンプル コードについて質問があります。
MutilMethods.h に BasicDipatcher::AddおよびBasicDispatcher::Go
という本がない場合は、p278 p279 で、または Loki のソースを参照してください。
ページp278の下からp279
の上に、サンプルコードがあります
関数 Go で見つけました。その引数は BaseLhs&、BaseRhs&
であり、この場合はShape&、Shape&である必要があります。
関数 Add では、その引数は SomeLhs&、SomeLhs& で
あり、この場合はRectangle&、Poly&である必要があります。
キーが異なるため、とにかくキーが一致しません
したがって、コールバック(HatchRectanglePoly) は呼び出されず
(同じコードに disp.Go.... を追加すると)、
代わりに std:runtime_error がスローされます。
私は正しいですか??
ありがとう
c++ - C ++スマートポインターの実装が、ポインターと一緒にヒープ上の参照カウンターを保持するのはなぜですか?
Alexandrescuとwikipipidiaを読んでいると、ポインティと参照カウンターがヒープに格納されているのがわかります。次に、カウンターをヒープに割り当てる必要があるため、参照カウントは非効率的であるという言及がありますか?なぜスタックに保存されないのですか?
design-patterns - なぜAbstractFactoryUnitは静的ポリモーフィズムではなく動的ポリモーフィズムを持っているのですか?
私は現在、最新の C++ を学習し、抽象ファクトリに焦点を当てているところです。私が理解していることから、Loki の主なアイデアの 1 つは、GoF で使用される「仮想」(ダイナミクス ポリモーフィズム) を回避することです。しかし、時々、それはまだ使用されています。抽象ファクトリの章で、AbstractFactoryUnit に「virtual」があります。http://loki-lib.cvs.sourceforge.net/loki-lib/loki/include/loki/AbstractFactory.h?view=markupこれまで読んだことから、それを回避する方法があります。http://en.wikipedia.org/wiki/Template_metaprogramming#Static_polymorphism
この場合、仮想を使用する方が効果的なのはなぜですか?
c++ - TypeList の Loki IndexOf の実装
以下からの読み取りに基づいて、Loki に基づいて TypeList を実装していました。
http://aszt.inf.elte.hu/~gsd/halado_cpp/ch06s09.html
IndexOfのサイトからこのコードを見ました(タイプリストでタイプのインデックスを見つけるため):
リストが再帰的にトラバースされるため、 T を比較するものはどこにも見られないため、それはうまくいかないようです。私の実装では、次のようになります。
実際、常に -1 を返します。考えてみれば、TypeList があると想像してください。その後、Tail は NullType になるため、特殊化によって temp は -1 になり、値は -1 になります。たとえ Head が char であり、ゼロを期待していたとしてもです。ここで何が欠けていますか?
ありがとう
Typelist の私の実装は単に:
これはロキスではないと思いますが、ジョエルの答えで、これがうまくいきました:
c++ - 派生クラスのc++タイプリスト
CRTP(不思議なことに繰り返されるテンプレートパターン)を使用すると、基本クラスにそれから派生したクラスの知識を提供できます。基本クラスから派生した各クラスのインスタンスを格納する配列を作成することはそれほど難しくありません(例を参照)。
すべてのタイプの派生クラスのタイプリスト( http://www.research.ibm.com/designpatterns/pubs/ph-jun00.pdfを参照)を作成できるかどうか疑問に思いました。問題は、コンパイラがそれから派生する新しいクラスをBase
検出するたびに、リストに新しい型を追加する必要があることですが、タイプリストは不変です(新しい型が追加された新しいリストを作成することは可能ですが、追加する私の知る限り、リストの要素は不可能です。最後に、次のようなものが必要です。
最終的な目標は、から派生するすべてのクラスを反復処理できるようにすることBase
です。
c++ - Loki ライブラリの STATIC_CHECK を理解する
上記のコードは正常に動作し、ポインタを char に変換しようとするとコンパイル時エラーが発生します。しかし、STATIC_CHECK マクロがどのように機能するかはあまり明確ではありません。
上記のコードに従って、次のようになるはずです
上記のマクロは次のように展開されます。
上記のマクロでは、これら2つのステートメントが何を意味するのか理解できません
明確に理解できる人は説明してください