可以定义一个在extern“C”块中继承另一个结构的结构吗?

问题描述 投票:1回答:1

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

感谢你并致以真诚的问候。

// 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;
}


}

上面的代码似乎在我的电脑上运行良好,但当我将它移植到Android时,一些总线上升,我无法弄清楚为什么。请帮忙!

c++
1个回答
1
投票

类型没有language linkage。 (从理论上讲,他们的成员名称可以,但它是always “C++”并不重要。)

所以没有任何关于你的struct定义的链接规范,你可以做你喜欢的。显然,这样的struct类型在C中永远不会完整,但这也无关紧要。其他地方出现了总线错误。

© www.soinside.com 2019 - 2024. All rights reserved.