我需要将4-5 .cpp和.h文件写入c代码。在C ++代码中,我们定义了一个类,构造函数,析构函数,函数。
如何用C代码转换它们? 有人可以给我一些例子,以便我可以实现它或提供链接,以便我可以更好地探索我的C代码吗? 如何实现所有功能我的意思是构造函数,析构函数,C语言中的类函数
答案 0 :(得分:13)
请注意,typedef不支持子类型,因此必须将所有继承转换为合成。
答案 1 :(得分:5)
有许多需要改变的注意事项和事情,但我认为你想做的是用C模拟面向对象的代码。
基本上,对于每个类,您需要取出函数并仅将数据成员保留在类/结构中(您将类重命名为struct并删除public / private / protected说明符)。
然后你需要为每个函数添加第一个参数,这是一个指向要操作的结构的指针。
答案 2 :(得分:3)
几乎所有典型的OO C ++代码都是围绕创建库的旧技术的时髦语法,这些库创建了一个“cookie”并要求将其传递给每个调用。因此,如果没有类具有虚拟方法(没有运行时调度),您应该能够执行以下操作:
objectname.methodname (...)
更改为classname_methodname (objecname, ...)
。以评论中给出的例子为例:
class QtCommandData {
public:
QtCommandData(unsigned short net, unsigned short command,
unsigned long n_data_bytes, unsigned short flgs,
unsigned char* data = NULL);
QtCommandData();
~QtCommandData();
public:
unsigned char* m_pData;
int m_Async;
protected:
unsigned int m_nDataBytes;
unsigned int m_BytesAllocated;
protected:
int Fill_Trailer();
};
...变成(我会将“设施名称”从QtCommandData
缩写为QtCD
):
typedef struct {
unsigned char* m_pData;
int m_Async;
unsigned int m_nDataBytes;
unsigned int m_BytesAllocated;
} QtCD;
QtCD_Construct(QtCD * handle,
unsigned short net, unsigned short command,
unsigned long n_data_bytes, unsigned short flgs,
unsigned char* data);
QtCD_Destruct(QtCD * handle);
QtCD_Fill_Trailer (QtCD * handle);
这是一般的想法。模板和动态调度以及其他一些事情可能会给你带来一两次,但我相信你能够应对挑战。 : - )
答案 3 :(得分:2)
对于函数,如果要将C ++库链接到C程序,还需要阻止C ++编译器进行名称修改,因此在标题中添加块,如
#ifdef __cplusplus
extern "C" {
#endif
/* Some functions here */
#ifdef __cplusplus
}
#endif
答案 4 :(得分:0)
C不直接支持OOP范例。将OO设计或代码翻译成C是一个相当简单的机械过程,但也许不能在这里合理地完全涵盖。主题上至少有一个主题:Can you write object-oriented code in C?包含指向资源的链接。
如果您的代码使用更复杂的C ++特性,例如泛型编程,多态和多重继承,那么您的工作可能比它的价值更难。但是,C和C ++可以相当容易地进行互操作。为什么你不只是提供C类的C包装?