gpt4 book ai didi

c++ - 在 extern "C" block 中定义一个继承另一个结构的结构是否可以?

转载 作者:行者123 更新时间:2023-11-30 04:48:29 25 4
gpt4 key购买 nike

我将我的 C++ 对象包装在 C 结构中,以便在纯接口(interface)中公开它们。为了简化和减少代码,我在下面编写代码。我的问题是这些代码会按预期执行吗?如果不是,为什么?

谢谢你,并致以最诚挚的问候。

// header file interface.h

#ifdef __cplusplus
extern "C"
{
#endif

typedef struct my_wrapper_t my_wrapper_t;

my_wrapper_t* my_wrapper_create();
void my_wrapper_destroy(my_wrapper_t* ptr);

#ifdef __cplusplus
}
#endif

// c++ file interface.cpp

template <typename T>
struct Wrapper
{
~Wrapper
{
if (rep)
{
delete rep;
}
}
template <typename Derived, typename ...Args>
static Derived * create(Args ... args)
{
auto p = new Derived;
p->rep = new T(std::forward<Args>(args)...);
return p;
}
T* rep;
}

extern "C"
{

struct my_wrapper_t : public Wrapper<Object>{}; // Object is c++ class define somewhere else

// implement interface as below
my_wrapper_t* my_wrapper_create()
{
return Wrapper<my_wrapper_t>::create(...);
}
void my_wrapper_destroy(my_wrapper_t* ptr)
{
delete ptr;
}


}

上面的代码似乎在我的 PC 上运行良好,但是当我将它移植到 Android 时,一些总线上升,我还不知道为什么。请帮忙!

最佳答案

类型没有language linkage . (名义上他们的成员名字可以,但它是 always “C++” 并不重要。)

因此,链接规范无需struct 定义,您可以随心所欲。显然,这样的 struct 类型在 C 中永远不可能是完整的,但这也无关紧要。总线错误出现在别处。

关于c++ - 在 extern "C" block 中定义一个继承另一个结构的结构是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55774555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com