問題タブ [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.
iphone - 「CFBundleRef不透明型」のコンテキストで「不透明型」という用語は何を意味しますか?
「不透明なタイプ」とは何かについて、誰かがよく説明していますか? CFBundleRef
その用語は、「CFBundleRef 不透明型」と言っていた のコンテキストで見ました。それは読み取り専用のタイプですか?
iphone - ObjectiveC++で不透明なポインタを使用する際の問題
この質問に対する答えは、不透明なポインターがC++メンバー変数をObjectiveC++ヘッダーに含めるための良い方法であることを説明しています。例に従おうとすると、コンパイルエラーが発生します。これが私のヘッダーの関連コードで、対応するコンパイラエラーがコメントとして表示されています。
私がここで間違っている単純なことはありますか?
c++ - C/C++ 不透明ポインタ ライブラリ
不透明なポインター/ハンドルを使用して C から C++ オブジェクトを管理するために既に作成されたライブラリ/ヘッダーはありますか?
自分で作成することもできますが、特に fortran バインディングがある場合は、既に作成されたソリューションを使用したいと思います。
私の特定の要件は次のとおりです。
- ラッパー生成機能 (私の考えでは、ブースト プリプロセッサを使用することです)
- ハンドルの検証と特別な値、および 64 ビット Fortran での移植性を提供するために、(生のポインターではなく) 整数ハンドル (lampi 風) を介してオブジェクトを処理します。
ありがとう
c - 不透明なC構造体:それらを宣言するさまざまな方法
CAPIで不透明(OPAQUE)型を宣言する次の2つのスタイルの両方を見てきました。Cで不透明な構造体/ポインタを宣言するさまざまな方法は何ですか?あるスタイルを他のスタイルよりも使用することの明らかな利点はありますか?
オプション1
オプション2
c - 不透明(OPAQUE)データ型の静的割り当て
組み込みシステム用にプログラミングする場合、malloc()は絶対に許可されないことがよくあります。ほとんどの場合、これに対処することはできますが、イライラすることが1つあります。それは、データの非表示を有効にするために、いわゆる「不透明(OPAQUE)型」を使用できないことです。通常、私は次のようなことをします:
create_handle()はmalloc()を実行して「インスタンス」を作成します。malloc()の必要性を防ぐためによく使用される構造は、create_handle()のプロトタイプを次のように変更することです。
そして、呼び出し元は次のようにハンドルを作成できます。
しかし残念ながら、このコードは明らかに無効であり、handle_tのサイズは不明です。
私はこれを適切な方法で解決するための解決策を実際に見つけたことはありません。誰かがこれを行う適切な方法を持っているかどうか、またはCでデータを隠すことを可能にする完全に異なるアプローチがあるかどうかを知りたいです(もちろん、module.cで静的グローバルを使用しないでください。複数のインスタンスを作成できる必要があります)。
c - c typedef(ed) 不透明ポインタ
不透明な構造と関連する API を次のように定義しました。
C ファイルで構造を定義できません。再定義エラーが発生します。
typedef なしで c ファイルで foo を使用できますが、typedef が必要です (つまり、foo* として直接使用します)。方法はありますか?
c++ - Cの不透明なポインタの落とし穴
不透明なポインタを次のように公開する(C ++への)レガシーCライブラリインターフェイスを使用しています
図書館で:
もちろん、これはこのライブラリのクライアントに型安全性をまったく提供しません。typedefをvoidポインターから構造体ポインターに変更することはまったく同じように機能しますが、少量の型の安全性を提供する必要がありますか?
実際には構造体を指していないのに、明示的に構造体を指していますが、アライメントの問題やその他の落とし穴について心配する必要がありますか?
c++ - スコープ付きポインター クラスで動的に割り当てられた不透明ポインターを適切に使用するにはどうすればよいですか?
バックグラウンド
テストのために Intel IPP Cryptographic Libraries を使用しています。
それらは、もちろん直接インスタンス化できないハッシュや暗号化などの共有コンテキストに使用されるいくつかの不透明な構造体を定義します。
これらの不透明な構造体の 1 つを初期化するには、バイト サイズをクエリしてから、いくつかのバイトを動的に割り当て、構造体ポインターにキャストします。
彼らの例は次のように機能します。
質問
割り当て解除について心配する必要がないように、スコープ付きポインター クラスでこれをラップする適切な方法は何ですか?
私が試したこと
デストラクタでのdeleteの呼び出しは、実際に割り当てられた配列のdelete []ではなく T 型になるため、次のことは安全ではないと思います。
私が検討した別の (簡略化された) オプションは、私自身の単純なスコープ ポインター クラスですが、そこでキャストすると、これが正しいかどうかわかりません。あいまいさがあります:
最後に、上記のわずかなバリエーションを検討しました。
どちらの場合でも、使用法は次のようになります。
c - 不透明変数への整数代入 (0) を無効にする方法は?
実装をクライアントから隠したいモジュールがあります。
実際には実装でのみ定義される構造体へのポインターである不透明型を宣言することにしました。
ゼロの値をこのタイプの変数に代入できることを除いて、すべて正常に機能していますが、これは避けたいです。
C での例を次に示します。
ヘッダファイル foo.h
実装ファイル foo.c
次に、モジュール bar.c を使用するクライアントの例を示します。
不透明な型は、実際には動的に割り当てられた構造体へのポインタです。値 0 を割り当てると、コンパイラがこの不透明なポインタへの 0 の割り当てを拒否した場合に回避できるメモリ リークが発生します。
null 以外の値をポインターに割り当てることはコンパイラーによって受け入れられないため、もう少し努力すればゼロ値でも同じことが達成できると思います。
この割り当てを無効にすることはできますか? どうすればそれを達成できますか?C++ または gcc 固有の構成要素を少し使用する必要がある場合は、それで問題ありませんが、純粋な C ソリューションが適しています。
前もって感謝します。