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

时间:2011-02-12 15:51:52

标签: c++ g++ wrapper

this bug in gcc是否有解决方法?

具体来说,我认为在为pthread_mutex_t编译包装器时遇到了这个问题。标题如下:

class DerivedClass: public pthread_mutex_t{
  public:
     DerivedClass() {}
     ~DerivedClass(){}
     DerivedClass someFunction(){}
};

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

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

非常感谢。

1 个答案:

答案 0 :(得分:5)

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

class DerivedClass {
  public:
    pthread_mutex_t mutex;
// ...
}

如果您需要的是一个可以转换为pthread_mutex_t *的类,那么请确保您的类没有虚函数,并将互斥量作为类中的第一个元素;然后,您可以安全地在DerivedClass *pthread_mutex_t *之间进行转换。或者添加operator pthread_mutex_t *()