问题标签 [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 回答
7966 浏览

iphone - 在“CFBundleRef opaque type”的上下文中,术语“opaque type”是什么意思?

有人对什么是“不透明类型”有很好的解释吗?我在 的上下文中看到了这个术语CFBundleRef,他们说:“CFBundleRef opaque type”。那是只读的类型吗?

0 投票
1 回答
903 浏览

iphone - 在 Objective C++ 中使用不透明指针的问题

这个问题的答案解释了不透明指针是在 Objective C++ 头文件中包含 C++ 成员变量的好方法。尝试遵循示例时出现编译错误。这是我的标题中的相关代码,相应的编译器错误显示为注释:

我在这里做错了什么简单的事情吗?

0 投票
2 回答
1105 浏览

c++ - C/C++ 不透明指针库

是否已经编写了库/头文件来使用不透明的指针/句柄从 C 中管理 C++ 对象?

我可以自己写一个,但我宁愿使用已经制定的解决方案,特别是如果它具有 fortran 绑定。

我的具体要求是:

  • 包装器生成工具(我的想法是使用 boost 预处理器)
  • 通过整数(而不是原始指针)句柄(à la mpi)处理对象,以提供句柄验证和特殊值以及 64 位 fortran 的一些可移植性。

谢谢

0 投票
4 回答
37713 浏览

c - 不透明的 C 结构:声明它们的各种方式

我在 C API 中看到了以下两种声明不透明类型的风格。在 C 中声明不透明结构/指针的各种方法是什么?使用一种风格比另一种风格有什么明显的优势吗?

选项1

选项 2

0 投票
10 回答
8558 浏览

c - 不透明数据类型的静态分配

在为嵌入式系统编程时,通常绝对不允许使用 malloc()。大多数时候我都可以处理这个问题,但有一件事让我很恼火:它让我无法使用所谓的“不透明类型”来启用数据隐藏。通常我会做这样的事情:

你去吧: create_handle() 执行 malloc() 来创建一个“实例”。一个经常用来避免 malloc() 的结构是改变 create_handle() 的原型,如下所示:

然后调用者可以这样创建句柄:

但不幸的是这段代码显然是无效的,handle_t 的大小是未知的!

我从来没有真正找到以适当方式解决此问题的解决方案。我很想知道是否有人有这样做的正确方法,或者可能是一种完全不同的方法来启用 C 中的数据隐藏(当然,在 module.c 中不使用静态全局变量,必须能够创建多个实例)。

0 投票
1 回答
7128 浏览

c - c typedef(ed) 不透明指针

我已经定义了一个不透明的结构和相关的 API,如下所示:

我无法在我的 c 文件中定义结构。给出重新定义错误。

我可以在没有 typedef 的 c 文件中使用 foo,但我想要 typedef(即直接将其用作 foo*)。有办法吗?

0 投票
3 回答
3354 浏览

c++ - C 不透明指针陷阱

我正在使用将不透明指针公开为的遗留 C 库接口(到 C++)

在图书馆:

这当然不会为这个库的客户提供任何类型安全。将 typedef 从 void 指针更改为结构指针是否应该完全相同,但提供少量类型安全?

现在我明确指向一个结构,即使我真的没有指向一个结构,是否有任何对齐问题或其他问题需要担心?

0 投票
4 回答
466 浏览

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++ 对象完全自包含。这将是一个巨大的痛苦。

有没有更好/更容易/正确的方法来做到这一点?

谢谢!

0 投票
2 回答
549 浏览

c++ - 如何在作用域指针类中正确使用动态分配的不透明指针?

背景

我正在使用英特尔 IPP 加密库进行测试。

他们定义了几个用于共享上下文的不透明结构,例如散列和加密,当然,这些结构不能直接实例化。

要初始化这些不透明结构之一,您查询字节大小,然后动态分配一些字节并转换为结构指针。

他们的例子是这样的:


问题

将它包装在作用域指针类中的正确方法是什么,这样我就不必担心释放了?


我尝试过的事情

我认为以下内容不安全,因为在析构函数中对delete的调用将在 T 类型上,而不是在实际分配的数组上的delete [] :

我考虑过的另一个(简化的)选项是我自己的一个简单的作用域指针类,但是那里的转换让我不确定这是否正确,尽管我对reinterpret_cast的理解是,当转换回原始类型时,不应该有任何歧义:

最后,我考虑了上述内容的轻微变化:

在任何一种情况下,用法都是这样的:

0 投票
3 回答
237 浏览

c - 如何禁用对不透明变量的整数赋值(0)?

我有一个模块,我想对其客户隐藏其实现。

我选择声明一个不透明类型,它实际上是一个指向仅在实现中定义的结构的指针。

一切正常,除了我可以将零值分配给这种类型的变量,我想避免这种情况。

这是 C 中的一个示例。

头文件 foo.h

实现文件 foo.c

现在这是一个使用模块的示例客户端:bar.c:

opaque 类型实际上是一个指向动态分配结构的指针;如果我将值 0 分配给它,我会发生内存泄漏,如果编译器拒绝将 0 分配给此不透明指针,则可以避免这种情况。

编译器不接受为指针分配非空值,因此我认为通过更多的努力可以实现零值。

是否可以禁用此分配?我怎样才能做到这一点?如果需要使用一些 C++ 或 gcc 特定的构造,我会同意的,尽管纯 C 解决方案会很好。

提前致谢。