将C结构作为C++类访问

red*_*red 3 c++ g++ wrapper

这个bug在gcc中有解决方法吗?

具体来说,我认为在为pthread_mutex_t编译包装器时遇到了这个问题.标题看起来像:

class DerivedClass: public pthread_mutex_t{
  public:
     DerivedClass() {}
     ~DerivedClass(){}
     DerivedClass someFunction(){}
};
Run Code Online (Sandbox Code Playgroud)

代码来自遗留系统,用于在GCC 3.2.x上编译,但不适用于GCC 4.1.2.

...理论上我想我可以在后台版本的GCC上重新编译所有内容,或者重构引用源以废弃包装器,但我想先看看是否有更简单的方法.

非常感谢.

bdo*_*lan 5

该错误已在GCC 4.6.0中修复,但如果您现在需要,请使用组合:

class DerivedClass {
  public:
    pthread_mutex_t mutex;
// ...
}
Run Code Online (Sandbox Code Playgroud)

如果你需要的是一个可以转换为a的类pthread_mutex_t *,那么确保你的类没有虚函数,并将互斥量作为类中的第一个元素; 那么你就可以相互转换DerivedClass *pthread_mutex_t *安全.或者添加一个operator pthread_mutex_t *().

  • 如果`pthread_mutex_t`有一个该名称的变量,那有什么关系呢?该库将使用`pthread_mutex_t*`并找到它的变量,客户端代码将使用`DerivedClass*`并找到该函数.组合可能是一种更好的方法,但是你过分简化了标准布局类的要求. (6认同)