本文主要是介绍2312d,d语言调用C++的类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
域用法
import core.stdc.stdio;
import example1;
extern(C):
void main()
{scope Foo1 f=new Foo1();//D语言在`betterC`下//可以类似C++栈上构造并析构!f.foo();f.bar(42);
}/*输出:
|| Foo1::Foo1()
|| Foo1::foo()
|| Foo1::bar(42)
|| Foo1::~Foo1()*/
编译命令:dmd -betterC -i main.d *.obj
,输出见上面的注释.
example1.cpp
内容为:
class Foo1
{
public:Foo1() { std::cout << "Foo1::Foo1()" << std::endl; }~Foo1() { std::cout << "Foo1::~Foo1()" << std::endl; }Foo1(const Foo1 &) = delete;Foo1(Foo1 &&) = delete;void foo() { std::cout << "Foo1::foo()" << std::endl; }void bar(int64_t i) { std::cout << "Foo1::bar(" << i << ")" << std::endl; }
};
绑定的原理
编译llvm与clang
example1.d
,是用polybuild
借助polyglot-cpp
构建的.内容如下:
module example1;
@nogc:extern(C++):
class Foo1
{
public:pragma(mangle, "??0Foo1@@QAE@XZ") this();pragma(mangle, "??1Foo1@@QAE@XZ") ~this();final void foo();final void bar(long i);
}
然后用F9
用msvc
生成example1.obj
.然后上面dmd
命令就链接起来了.
所有编译型(C++,d,rust
)语言的代码,在obj
层面是一致的,因而可以通过链接器
链接起来再运行!
这篇关于2312d,d语言调用C++的类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!