相关疑难解决方法(0)

通过extern"C"函数与C++对象的接口

一个可以extern "C"函数接受或返回C++ -特定的数据类型,如参考文献,指针到成员或非POD类(由值)?我在C++标准中找不到禁止此内容的任何内容.从逻辑上讲,我希望标准可以说一些,因为C ABI不一定适合传递这类类型.

我想要使​​用C链接的原因与C编译器无关.该函数仅从C++代码调用.我只想从动态库中导出未编码的函数名.

一个愚蠢的代码示例:

class Foo {
  public:
    virtual void doit() = 0;
};

class Bar : public Foo {
  public:
    void doit() { std::cout << "Bar" << std::endl; }
};

extern "C" Foo& getFoo() { static Bar bar; return bar; }

extern "C" Bar getBar() { return Bar(); }
Run Code Online (Sandbox Code Playgroud)

这在Linux上用GCC编译,并按预期工作.应该是标准吗?

问题是对这个问题的评论中的讨论的后续行动.

更新我用Comeau编译器对此进行了测试,它没有抱怨.

c++ standards linkage

16
推荐指数
1
解决办法
2868
查看次数

标签 统计

c++ ×1

linkage ×1

standards ×1