当前位置: 首页 > 编程笔记 >

Ruby使用C++扩展实例(含C++扩展代码示例)

东方骏
2023-03-14
本文向大家介绍Ruby使用C++扩展实例(含C++扩展代码示例),包括了Ruby使用C++扩展实例(含C++扩展代码示例)的使用技巧和注意事项,需要的朋友参考一下

早年写过用C++ + SWIG写Ruby插件的文,但实际中还是以原生C++写Ruby扩展,因为也相当简单。但长久没用还是会忘记,不得不翻以前的老代码回忆,写下这篇博文,若下次再忘记,也不至于去翻仓库。

建立 extconf.rb


require 'mkmf'

$libs = '-lstdc++' create_makefile 'foo'


建立 foo.cc

#include <ruby.h>

VALUE plus(VALUE self, VALUE va, VALUE vb) {  int a = NUM2INT(va);  int b = NUM2INT(vb);

 return INT2NUM(a+b); }

extern "C" void Init_foo() {  VALUE foo = rb_define_module("Foo");  rb_define_module_function(foo, "plus", RUBY_METHOD_FUNC(plus), 2); }


生成扩展 foo.so

$ ruby extconf.rb

$ make

# 如果要安装至site-ruby

$ make site-install


测试文件 test.rb

require 'foo.so'

puts Foo.plus(3,4) $ ruby test.rb 7

 类似资料:
  • 类扩展与类别有一些相似之处,但它只能添加到编译时具有源代码的类中(类与类扩展同时编译)。 类扩展声明的方法是在原始类的实现块中实现的,因此不能在框架类上声明类扩展,例如或类,如。 扩展名实际上是没有类别名称的类别,它通常被称为匿名类别。 声明扩展的语法使用关键字,就像标准的Objective-C类描述一样,但不表示子类的任何继承。 它只是添加括号,如下所示 - 扩展的特征 不能为任何类声明扩展,仅

  • 在Ruby中扩展Ruby的新功能是很容易的,如果你用c来写底层的代码,那么我们就能更好的扩展Ruby的功能。 用c来扩展ruby是非常简单的事情。比如,我们我们在为Sunset Diner and Grill建造一个基于internet的自动点唱机,它将从硬盘播放mp3文件或者从cd唱机播放cd音频。我们想从ruby程序中控制硬件系统,硬件提供商为我们提供了一个C语言的头文件,和一个二进制的实现库

  • 本文向大家介绍C#实现Array添加扩展实例,包括了C#实现Array添加扩展实例的使用技巧和注意事项,需要的朋友参考一下 一般学过C#的都知道,Array 一旦定义好,比如四个长度,当需要再往里面添加元素的时候,需要Array.Resize一下才可以。有鉴于此,为了提高代码复用,所以索性封装下,方便使用。 具体实现代码如下: 测试代码: 测试结果: 代码逻辑很简单,无需说明,只是方面后续使用而已

  • 我特别想知道: 扩展名驻留在哪里(文件和命名约定)? 什么是扩展语法? 几个简单的常用示例是什么?

  • 本文向大家介绍PyTorch中的C++扩展实现,包括了PyTorch中的C++扩展实现的使用技巧和注意事项,需要的朋友参考一下 今天要聊聊用 PyTorch 进行 C++ 扩展。 在正式开始前,我们需要了解 PyTorch 如何自定义module。这其中,最常见的就是在 python 中继承torch.nn.Module,用 PyTorch 中已有的 operator 来组装成自己的模块。这种方式

  • 10 Node.js 的 c++ 扩展 Node 的优点是处理 IO 密集型操作,对于互联网应用来说,很大一部分内容都是 IO 处理(包括文件 IO和网络IO),但是还是有部分功能属于计算密集型操作。如果遇到这种计算密集型操作,推荐的解决方案是使用其他语言来实现,然后提供一个服务,让 Node 来进行调用。不过我们这章要讲的是 Node 的 C++ 扩展,也就是说,我们可以通过这种方式是 Node