我在 Linux (RHEL 5.3) 上移植了一些旧的 C++ 项目。
情况如下
#include <semaphore.h>
class OldClass: public sem_t
这曾经有效,因为直到 glibc-2.3.3.20040420 sem_t 是一个结构。现在,新版本的 glib 不允许使用 union =>inheritance。所以编译不起作用。
它怎么样:
typedef struct { struct
_pthread_fastlock __sem_lock;
int __sem_value;
_pthread_descr __sem_waiting; }
sem_t;
情况如何:
typedef union {
char __size[__SIZEOF_SEM_T];
long int __align; }
sem_t;
解决此问题的最佳方法是什么?如何“包装” sem_t 的功能?
非常感谢!
======稍后编辑=====================================
OldClass 被其他类“稍后”使用(项目很大):因此,我正在寻找一种方法来保持相同的接口,这样我就可以避免重写对 OldClass 的所有调用。
我在想是否有办法创建一个环绕 sem_t 的类 MySem_t;然后OldClass 将继承 MySem_t ...这听起来可行吗?
谢谢你。