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

时间:2019-04-20 14:42:24

标签: c++

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

谢谢你,最好的问候。

// 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时,某些总线上升了,我还不知道为什么。请帮忙!

1 个答案:

答案 0 :(得分:1)

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

因此,没有struct定义的 do 链接规范,您可以做自己喜欢的事情。显然,这样的struct类型在C语言中永远不可能是完整的,但这也没有关系。总线错误出现在其他地方。