2312d,d语言调用C++的类

2023-12-16 10:28
文章标签 语言 c++ 调用 2312d

本文主要是介绍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);
}

然后用F9msvc生成example1.obj.然后上面dmd命令就链接起来了.
所有编译型(C++,d,rust)语言的代码,在obj层面是一致的,因而可以通过链接器链接起来再运行!

这篇关于2312d,d语言调用C++的类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/500132

相关文章

R语言中的正则表达式深度解析

《R语言中的正则表达式深度解析》正则表达式即使用一个字符串来描述、匹配一系列某个语法规则的字符串,通过特定的字母、数字及特殊符号的灵活组合即可完成对任意字符串的匹配,:本文主要介绍R语言中正则表达... 目录前言一、正则表达式的基本概念二、正则表达式的特殊符号三、R语言中正则表达式的应用实例实例一:查找匹配

Go语言结构体标签(Tag)的使用小结

《Go语言结构体标签(Tag)的使用小结》结构体标签Tag是Go语言中附加在结构体字段后的元数据字符串,用于提供额外的属性信息,这些信息可以通过反射在运行时读取和解析,下面就来详细的介绍一下Tag的使... 目录什么是结构体标签?基本语法常见的标签用途1.jsON 序列化/反序列化(最常用)2.数据库操作(

利用c++判断水仙花数并输出示例代码

《利用c++判断水仙花数并输出示例代码》水仙花数是指一个三位数,其各位数字的立方和恰好等于该数本身,:本文主要介绍利用c++判断水仙花数并输出的相关资料,文中通过代码介绍的非常详细,需要的朋友可以... 以下是使用C++实现的相同逻辑代码:#include <IOStream>#include <vec

基于C++的UDP网络通信系统设计与实现详解

《基于C++的UDP网络通信系统设计与实现详解》在网络编程领域,UDP作为一种无连接的传输层协议,以其高效、低延迟的特性在实时性要求高的应用场景中占据重要地位,下面我们就来看看如何从零开始构建一个完整... 目录前言一、UDP服务器UdpServer.hpp1.1 基本框架设计1.2 初始化函数Init详解

Django调用外部Python程序的完整项目实战

《Django调用外部Python程序的完整项目实战》Django是一个强大的PythonWeb框架,它的设计理念简洁优雅,:本文主要介绍Django调用外部Python程序的完整项目实战,文中通... 目录一、为什么 Django 需要调用外部 python 程序二、三种常见的调用方式方式 1:直接 im

C++ 右值引用(rvalue references)与移动语义(move semantics)深度解析

《C++右值引用(rvaluereferences)与移动语义(movesemantics)深度解析》文章主要介绍了C++右值引用和移动语义的设计动机、基本概念、实现方式以及在实际编程中的应用,... 目录一、右值引用(rvalue references)与移动语义(move semantics)设计动机1

Java调用DeepSeek API的8个高频坑与解决方法

《Java调用DeepSeekAPI的8个高频坑与解决方法》现在大模型开发特别火,DeepSeek因为中文理解好、反应快、还便宜,不少Java开发者都用它,本文整理了最常踩的8个坑,希望对... 目录引言一、坑 1:Token 过期未处理,鉴权异常引发服务中断问题本质典型错误代码解决方案:实现 Token

C++ move 的作用详解及陷阱最佳实践

《C++move的作用详解及陷阱最佳实践》文章详细介绍了C++中的`std::move`函数的作用,包括为什么需要它、它的本质、典型使用场景、以及一些常见陷阱和最佳实践,感兴趣的朋友跟随小编一起看... 目录C++ move 的作用详解一、一句话总结二、为什么需要 move?C++98/03 的痛点⚡C++

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

C++构造函数中explicit详解

《C++构造函数中explicit详解》explicit关键字用于修饰单参数构造函数或可以看作单参数的构造函数,阻止编译器进行隐式类型转换或拷贝初始化,本文就来介绍explicit的使用,感兴趣的可以... 目录1. 什么是explicit2. 隐式转换的问题3.explicit的使用示例基本用法多参数构造