【问题标题】:How to load a struct knowing the first element?如何加载知道第一个元素的结构?
【发布时间】:2014-12-19 19:29:53
【问题描述】:

我在一些地方看到

struct dri2_egl_config *dri2_conf = dri2_egl_config(conf);

结构在哪里

struct dri2_egl_config
{
   _EGLConfig         base;
   const __DRIconfig *dri_single_config;
   const __DRIconfig *dri_double_config;
};

conf_EGLConfig*
但是当我在 C++ 上尝试这个时,它无法编译。如何在 C++ 上执行此操作以访问其他结构参数?

【问题讨论】:

  • 对于 C++,它只是:dri2_egl_config *dri2_conf = dri2_egl_config(conf);
  • @PaulR 先生,我从来没有遇到过这个。你能详细说明一下这里做了什么吗?
  • @SouravGhosh 它似乎不太可能是构造函数。正如 PaulR 所说,dri2_egl_config() 似乎也是一个函数,这将在 C++ 中引起问题。我看不出有任何其他方式可以工作,因为结果被分配给了一个指针。
  • 带有双下划线的名字在C和C++中都是保留的;它们不应该在普通代码中使用。您确定图书馆鼓励您使用这些名称吗? (如果是这样,这些库就不正常了。)
  • 一如既往,请向我们提供您的编译器生成的诊断信息。否则这只能是猜测工作。 dri2_egl_config 也可以是宏,随便...

标签: c++ c struct c99


【解决方案1】:

这看起来像 C 中的继承。对于 C++ 和 C,标准确保不会对字段进行重新排序。 因此,在 C 中,基字段地址保证与整个结构相同。

C 中的

dri2_egl_config() 似乎是一个正常的功能。在 C++ 中,它将是一个从不返回指针的构造函数。 如果您必须考虑虚拟信息,C++ 中的寻址也会更加复杂。对于没有虚拟方法等的简单情况,如果您知道字段大小,您仍然可以通过地址偏移进行寻址。 但这需要强制转换才能使指针类型保持一致。因此,似乎 dri2_egl_config() 返回一个 dri2_egl_config *。这都是直截了当的 C。

【讨论】:

  • 是的,它是一个函数,但是用宏创建的,这就是我找不到函数的原因。
猜你喜欢
  • 2017-02-12
  • 2013-10-08
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多