问题标签 [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 opaque type”的上下文中,术语“opaque type”是什么意思?
有人对什么是“不透明类型”有很好的解释吗?我在 的上下文中看到了这个术语CFBundleRef
,他们说:“CFBundleRef opaque type”。那是只读的类型吗?
iphone - 在 Objective C++ 中使用不透明指针的问题
这个问题的答案解释了不透明指针是在 Objective C++ 头文件中包含 C++ 成员变量的好方法。尝试遵循示例时出现编译错误。这是我的标题中的相关代码,相应的编译器错误显示为注释:
我在这里做错了什么简单的事情吗?
c++ - C/C++ 不透明指针库
是否已经编写了库/头文件来使用不透明的指针/句柄从 C 中管理 C++ 对象?
我可以自己写一个,但我宁愿使用已经制定的解决方案,特别是如果它具有 fortran 绑定。
我的具体要求是:
- 包装器生成工具(我的想法是使用 boost 预处理器)
- 通过整数(而不是原始指针)句柄(à la mpi)处理对象,以提供句柄验证和特殊值以及 64 位 fortran 的一些可移植性。
谢谢
c - 不透明的 C 结构:声明它们的各种方式
我在 C API 中看到了以下两种声明不透明类型的风格。在 C 中声明不透明结构/指针的各种方法是什么?使用一种风格比另一种风格有什么明显的优势吗?
选项1
选项 2
c - 不透明数据类型的静态分配
在为嵌入式系统编程时,通常绝对不允许使用 malloc()。大多数时候我都可以处理这个问题,但有一件事让我很恼火:它让我无法使用所谓的“不透明类型”来启用数据隐藏。通常我会做这样的事情:
你去吧: 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++ - 从 Obj-C / Obj-C++ 中使用 C++ 对象——调用外部方法
我在 Obj-C 代码中使用 C++ 对象。为此,我将 C++ 对象包装在 ObjC 对象中,这些对象又使用不透明指针来访问 C++ 类。那东西在起作用。
问题:C++ 对象(例如 CPPObj.cc)使用来自其他 C++ 头文件(例如 ToolsCPP.h)的方法---当我尝试编译 ObjC 代码(例如 Obj.mm)时,它抱怨这些方法是未定义的.
即使我直接在 Obj.mm 文件中包含 ToolsCPP.h,它仍然会抱怨。
丑陋的解决方案:在 CPPObj.cc 中包含来自 ToolsCPP.h 的所有必要方法,以便 C++ 对象完全自包含。这将是一个巨大的痛苦。
有没有更好/更容易/正确的方法来做到这一点?
谢谢!
c++ - 如何在作用域指针类中正确使用动态分配的不透明指针?
背景
我正在使用英特尔 IPP 加密库进行测试。
他们定义了几个用于共享上下文的不透明结构,例如散列和加密,当然,这些结构不能直接实例化。
要初始化这些不透明结构之一,您查询字节大小,然后动态分配一些字节并转换为结构指针。
他们的例子是这样的:
问题
将它包装在作用域指针类中的正确方法是什么,这样我就不必担心释放了?
我尝试过的事情
我认为以下内容不安全,因为在析构函数中对delete的调用将在 T 类型上,而不是在实际分配的数组上的delete [] :
我考虑过的另一个(简化的)选项是我自己的一个简单的作用域指针类,但是那里的转换让我不确定这是否正确,尽管我对reinterpret_cast的理解是,当转换回原始类型时,不应该有任何歧义:
最后,我考虑了上述内容的轻微变化:
在任何一种情况下,用法都是这样的:
c - 如何禁用对不透明变量的整数赋值(0)?
我有一个模块,我想对其客户隐藏其实现。
我选择声明一个不透明类型,它实际上是一个指向仅在实现中定义的结构的指针。
一切正常,除了我可以将零值分配给这种类型的变量,我想避免这种情况。
这是 C 中的一个示例。
头文件 foo.h
实现文件 foo.c
现在这是一个使用模块的示例客户端:bar.c:
opaque 类型实际上是一个指向动态分配结构的指针;如果我将值 0 分配给它,我会发生内存泄漏,如果编译器拒绝将 0 分配给此不透明指针,则可以避免这种情况。
编译器不接受为指针分配非空值,因此我认为通过更多的努力可以实现零值。
是否可以禁用此分配?我怎样才能做到这一点?如果需要使用一些 C++ 或 gcc 特定的构造,我会同意的,尽管纯 C 解决方案会很好。
提前致谢。