首页 > 解决方案 > 在 C++ 类和 C 结构之间转换——如何处理析构函数?

问题描述

可以在C++ classand之间转换C structure吗?(这里的用例是我有两个不同的项目,一个在C++,另一个在C,我有一个接口来连接两个项目)

我尝试了一些示例,其中(aC++ class和 a C structure)都具有相同的成员函数和成员变量,并且效果很好。但是,一旦它们中的任何一个缺失成员函数/变量不起作用并且强制转换不会为成员变量提供正确的值。

我注意到的一件事是,如果我向C++ classthis 添加一个析构函数,只要没有定义析构函数就可以正常工作virtual

C++

class myClass{
public:
    myClass() {}
     ~myClass(){} // if I define this destructor as virtual the casting fails 
    int     var;
};

C

struct myStru {
    int    var;
};

铸造C

myStru *struObj = (myStru*)malloc(sizeof( myStru));
struObj = (myStru*) classObj; // classObj is a void pointer that is passed to the `C` project and it was created in the `C++` project

编辑:我在本文中找到了一个很好的答案(请参阅从 C 访问 C++ 类): https://www.oracle.com/technical-resources/articles/it-infrastructure/mixing-c-and-cplusplus。 html

标签: c++cstruct

解决方案


一种方法是根本不强制转换,而是让 C++ 类从 C 结构继承。

例子:

#include <iostream>

// #include "the_c_header.h"

class myClass : public myStru {
public:
    myClass(int v) : myStru{v} {}

    virtual ~myClass() = default;
};

class der : public myClass {
public:
    using myClass::myClass;
    
private:
    int not_copied;
};

int main() {
    der x(123);

    myStru p = x;

    std::cout << p.var << '\n';
}

现在,pmyStru部分的副本x


推荐阅读