問題タブ [opaque-pointers]

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 に答える
40448 参照

c - Cの不透明ポインタとは何ですか?

C の不透明ポインターの概念の背後にある使用法とロジックを教えてもらえますか?

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

c++ - 不透明なポインタを介してxmlデータを取得する

ベンダーのAPIを使用してメッセージのxml部分を取得する際に問題が発生しました。動作の例として:getDestination(void * message、void * destination、void * size)

生成:受信したメッセージ。(目的地:いくつかの目的地)。

メッセージのXML部分を取得するには、getXmlPtr(void * msg、void ** xml_ptr、void * xml_length)である関数が必要です。

したがって、問題は、xml情報を取得できるようにptrを宣言して渡す方法です(ベンダーのドキュメントは本当に悪いです)。ほとんどの場合、引数は、入力するアプリケーションポインタへのポインタである必要があります。戻り時のメッセージXMLデータポインタ。プログラマーは、返されたvoidポインターを、アプリケーションに適した任意の参照にキャストできます。

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

c++ - 不透明なポインタをアップキャスト

私はpimplイディオムを使おうとしています。特に、実装クラスは別のインターフェースを実装します。

私の質問は、次の状況でどのキャストを使用できるかということです。

この場合、dynamic_castは正常に機能しますか?この場合に使用できるキャストの他のタイプはありますか?

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

ios - CGColorRef 不透明型のオブジェクトの ID

この研究により、CoreFoundation オブジェクトの内部が理解できることを願っています。以下は、無料の Quartz プロジェクトの CGColor の構造です

CGColor オブジェクトが作成され、nextID メンバーに割り当てられるたびに増分されるグローバル スレッド セーフの一意の値が保持されます。ドキュメントに記載されていない CGColorGetIdentifier() 関数のみがこの値を返します。

CoreGraphics とそのリソース ライブラリを確認しました。ripc_GetColor (libRIP.A.dylib) 関数のみが CGColorGetIdentifier() 関数を呼び出し、いくつかの色ペアの nextID 値を比較しているようです。

CGColorGetIdentifier; のコール スタック (nextID に関する推測に役立つことを期待して)

CFEqual は最初に参照を比較し、それらが等しくない場合はコンテンツを比較するため、参照を比較することは正しいアプローチです。参照が変更されない場合、一意の ID 値を作成して維持するのはもったいないでしょう。

したがって、一意の ID の可能な要件と、それらを比較してオブジェクトが等しいかどうか。

  1. スレッドの安全性に関する懸念がある場合は、参照を比較するよりも ID を比較することをお勧めします。ポイントを参照するコンテンツ(データ)は、参照を取得した直後に(別のスレッドによって)変更される可能性があります。
  2. または、後で使用するために保存された参照が、同じスレッド内であっても、他の予期しないアクションによって解放および/または変更されます。

したがって、コンテンツに関する参照のようなものを使用して、常に使用できるようにすることができます (メモリが解放されると参照が無効になる可能性があります)。また、コンテンツ全体ではなく、ID などの一部のデータを使用すると、パフォーマンスが最適化されます。

Apple の Core Graphics の CGColor にあるこの nextID の本当の意図は何ですか? 以前のアプローチから残っているので、完全に放棄することはできませんでしたか?

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

c++ - C++11 クラス メンバ配列サイズ constexpr 前方宣言

いくつかのヘッダーを、使用後にインクルード チェーンから除外したいと考えています。私が知っていることから、c ++ 11には除外「header.h」はありません。

疑似コード 希望的観測:

問題が明らかになる私の例は次のとおりです。これは深刻な問題ではないと主張しないでください。この例は、最小限の抽象言語の使用を示すために分割されています。昔ながらの解決策とその欠点についても説明します。

古いスタイルのソリューション

justanotherheader.h:

justanothercppunit.cpp:


私の現在の解決策

justanotherheader.h:

justanothercppunit.cpp:

したがって、上記のコードは機能しています。利点は次のとおりです。複雑さを隠し、実行時に動的なメモリの間接参照がありません。は?つまり、配置 new により、オブジェクト全体をスタックに配置でき、すべてのメンバーアドレスがコンパイル時に認識されます。私の試みは、不透明なポインターのインターフェイス設計を使用しながら、最高のパフォーマンスを実現することです。

「このパフォーマンス上の利点は、考える努力に値しない」と考える場合。その質問を残してください。


私の期待される解決策

justanotherheader.h:

justanothercppunit.cpp:

私の現在のソリューションでは、sizeof(bulkywrap_pImpl) を確認し、UNKNOWNSIZE を手動で調整する必要があります。現在、編集ユニットから他のユニットに情報を取得することはできないと思います。これは通常、正当な理由で意図されていることを知っていますが、これにより c++11 の可能性が制限されます。

私は指摘したい:

jtc1 sc22 wg21 紙 n3337

jtc1 sc22 wg21 紙 n3308

情報天気と、標準でこれが許可されていない理由を見つけるのを手伝ってください。

しかしさらに、コンパイル時にリテラル定数をコンパイルユニットから別のコンパイルユニットにエクスポートする方法の解決策を見つけたいと思います。これは単なるリテラルであるため、すべてのステートメントと式は影響を受けません。したがって、コンパイルは配列のサイズがどこから来るかに依存しません。

私の提案は、ISO-jtc1-sc22-wg21 とコンパイラの開発者にいくらかの作業をもたらしますが、すべての定義が同じ変換単位に表示される必要があるため、テンプレートと constexpr の間に関連する違いは見られません。これにより、モジュラー プログラミングとクリーンなインターフェイスが偽物になります。

いいえ: プリプロセッサ マクロ、動的な新しいメンバー関数または仮想メンバー関数を使用したくありません。クラスのサイズは const であるため、最大の const-correctness が重要です。

助けてください

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

c++ - テンプレートと不透明なポインターは継承的に互換性がありませんか?

問題はほとんどすべてですが、テンプレートクラスで不透明な ptr を使用してカプセル化を取得する方法はありますか? (コンパイラはコンパイル時にすべてを認識している必要があるため、私の直感は「いいえ」です)

MyClass は静的ライブラリを介して公開する必要があり、MyClassImp は隠されている、このようなものです。

.cpp ファイルに隠されている MyClass::Foo は、MyClassImp の定義を含めないと公開できないため、これは機能しません。そのため、関数が見つからないというエラーが発生します。

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

python - swigを使用して不透明(OPAQUE)型をPythonに公開する

SWIGを使用して不透明(OPAQUE)型をCでラップしようとしていますが、その方法がわかりません。以下に3つのファイルがあります。

simplelib.c:

simplelib.h:

と私のインターフェイスファイルsimplelibswig.i:

このCMakeLists.txtを使用して、CMakeを使用してすべてをビルドします。

ここで、1)不透明(OPAQUE)型の名前をsimplelib_MyTypeからMyTypeに変更します。2)%extendを使用してコンストラクタ/デストラクタ/メソッドで型を公開します。

問題は、上記がビルドされたpythonモジュールの型を公開しないことです。インターフェイスファイルがtypedefをtypedefed名のクラスとして公開することを期待しますが、それは起こりません。したがって、上記のポイント1と2に進むことはできません。私は何が間違っているのですか?

よろしく、リッカード

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

javascript - .click目的でdivの透明度を検出しますか?

3 つの要素が重なり合っており、それぞれにある程度の透明度が含まれています。中央は透明ではなく、エッジの周りだけです。バックグラウンドで div をクリックできるようにしたいのですが、最前面の div の端につながる透明なスペースがその上にあるため、代わりにその最前面の div のクリック イベントが発生します。前のものはまだクリック可能にする必要があるため、明らかにそれを無効にしたり、stopPropegation() を使用したりすることはできません。

透明なスペースを検出し、不透明なスペースと区別するためのソリューションはありますか? ありがとう!

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

c - C の不透明データ型

不透明なデータ型を返すためにCで推奨される方法は何ですか?

より慣用的な他のオプションはありますか?

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

c - 不透明構造ポインタ

私のライブラリには、ライブラリに必要なすべてを含むインスタンス構造があります。これは、ライブラリの複数のインスタンスを定義できるようにするためです。ライブラリでは、ユーザーが独自の拡張機能またはカスタム変数を定義する必要があります。

これは私が試したものです:

Library.h

そして、ユーザーは次のことができます:

Main.c

ただし、「セグメンテーション違反」のエラーが発生します。