问题标签 [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.
c - typedef opaque 指向不透明指针的指针
我得到以下代码:
我想做的是使用外部模块的不透明指针作为模块内部的不透明指针来保存不必要的分配。目前我的解决方法是:
我想做的是使用类似的东西:
从我的角度来看,这应该是可能的,因为两者都是指针,但我需要让它免费警告?谢谢你的帮助。
sqlite - 不透明指针错误 Swift 3.1
我在使用 Swift 3.1 将外国和国际字符插入或更新到 SQLite 数据库时遇到问题。所以,我尝试了下面的方法来添加 UTF8,但遇到了一个错误“无法将 'string' 类型的值转换为预期的参数类型 'OpaquePointer!' ”。
我很难过,不知道在哪里看。
我正在搜索每一个,但找不到对此类错误的引用。
c - 使用指向非结构类型的不透明指针
在我的 C 编程中,我使用 opaque-pointers 来构建结构,以这种方式强制抽象和封装我的代码:
interface_header.h:
defs_header.h:
我的问题我想使用一个简单的类型作为t_mytype
(char
例如),但不通知界面。我不能只使用typedef char t_mytype
,因为这会暴露类型的内部结构。我可以只使用 void 指针,但要以类型检查为代价,我宁愿避免这种情况。
做两个 typedef 也不起作用,因为这会typedef redefinition with different types
从编译器中抛出一个。
我也在考虑做一个只有一个成员的结构,这将是我的简单类型,但这会不会是矫枉过正?
感谢您的回答。
python - 处理pybind11中的不透明指针
我正在将用 C++ 编写的 Python 模块从 Boost.Python 移动到 Pybind11。我的 C++ 代码依赖于具有不透明指针的 C 库。对于 Boost.Python,我使用此处的文档来处理这些不透明的指针:https ://www.boost.org/doc/libs/1_66_0/libs/python/doc/html/reference/to_from_python_type_conversion/boost_python_opaque_pointer_conv.html
我找不到 Pybind11 的等效代码。作为参考,这是我想使用 Pybind11 向 Python 公开的 C 标头:
这可以通过 Boost.Python 公开,如下所示:
c - 如何在C中打印双指针值
我们正在为 C 中的通用类型数据实现优先级队列。我们认为指针等之间的分配是正确的,但我们不知道如何在最后打印“元素”的 int 值。你能帮助我吗?
c - 如何正确调用 Fortran 2003 中涉及不透明指针的 C 函数?
我正在学习 Fortran 2003。作为一项培训任务,我正在尝试从 Fortran 2003 调用使用不透明指针的 C 库:
我在互联网上找到的大多数建议都告诉我将foobar
类型描述为type(c_ptr)
,所以以下应该可以工作:
这声明foo_create
为返回 avoid*
而不是foobar
= struct foobar_s *
,但无论如何它都适用于现代架构。
我一直在尝试创建一个独特的 Fortran 类型,更接近不透明 C 指针的意图。唯一对我有用的是:
对应于:
在 C 侧。现在,C 标准的 §6.7.2.1 保证 a 开头的struct
地址是第一个元素的地址(对吗?)但它的末尾可能有一些填充(但在我使用的架构上没有,因为指针是自对齐的),所以这整个装置在我的机器上工作:
我已经验证 Valgrind 对于调用 C 函数的程序foo_create()
和foo_destroy()
使用这种类型定义的 Fortran 程序没有显示错误。尽管如此,它仍然不能作为一个确定的证据。
struct { void * ptr }
具有相同大小和位模式的假设是否struct foobar_s *
会中断?这是在 Fortran 2003 中包装不透明 C 指针(并创建不同类型)的最佳方法吗?
c - 如何查看不透明数据类型的内部?
我知道这种做法违背了不透明数据类型的全部观点,但出于逆向工程的目的,人们如何着手研究不透明数据类型?
c - 在这种情况下,如何对程序进行模块化以及实现信息隐藏呢?
我创建了两个类“DEVICE_s”和“DEVICE_SET_s”,如下所示:
Device_Manager.h
Device_Manager.c
因为我将这两个类放在同一个文件中,所以操作变量“Instance”和“Objects”的所有函数都放在这个文件中。
考虑到模块化,我认为这种方式不好,所以我想创建另一个源文件来单独管理类“DEVICE_SET_s”,就像:
DeviceSet_Manager.h
DeviceSet_Manager.c
但是,就 DeviceSet_Manager.c 而言,“DEVICE_s”类是不可见的(不是完整的类型)。
我该如何解决?谢谢
c - 具有一些私有操作的不透明结构
我正在设计一个图书馆,遇到了一个关于分离公共和图书馆私有操作的问题。我有以下库接口:
libmylib.h
:
出于测试目的,我想提供一个为单元测试中使用的不透明结构分配内存的函数。但是由于客户不需要这个功能,我决定将其设为私有(并将结构的定义也放在那里):
lib_context_internal.h
:
但是函数的定义在libmylib.c
(没有lib_context_internal.c
文件)中提供:
libmylib.c
:
困扰我的是我将与相同数据结构相关的分配/释放函数放在不同的头文件中(即使)我在同一个.c
文件中定义了它们。做这样的事情不是很常见吗?