首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Racket/Scheme C++扩展和继承

Racket/Scheme C++扩展和继承
EN

Stack Overflow用户
提问于 2014-01-22 19:20:25
回答 1查看 371关注 0票数 2

因此,我一直在使用C++站点上的教程(http://docs.racket-lang.org/inside/overview.html)为一些类编写一些racket扩展,并且能够成功地将它们加载到球拍中。但是,我想知道是否可以使用继承来重用一些代码。

例如,我有两个用C++编写的类,Foo和Bar。

Foo类如下所示:

代码语言:javascript
复制
Foo { 
    func1() { /* ... do stuff */ } 
} 

类栏如下所示:

代码语言:javascript
复制
Bar : Foo {
     func2() { /*... do more stuff /*} 
} 

目前,我已经编写了一个.cpp racket扩展,该扩展创建了Bar,并为func1()和func2()创建了扩展;但是,我想创建两个racket扩展类。一个只在Foo中执行功能的扩展,然后我只想在Bar_ext.h中包含Bar_ext.h(我对Foo的racket扩展),所以我可以访问所有的函数。

所以我现在有一个:

Bar_ext.cpp:

代码语言:javascript
复制
func1_racket_ext() { /*... do racket stuff and run func1() */} 


func2_racket_ext() {/* ... do more racket stuff and run func2() /*} 


/* Scheme initializes etc... */

但我真正想要的是:

Foo_ext.h:

代码语言:javascript
复制
func1_racket_ext() { /*... do racket stuff and run func1() */} 



/* Scheme initializes etc... */

Bar_ext.cpp:

代码语言:javascript
复制
#include "Foo_ext.h" 


func2_racket_ext() {/* ... do more racket stuff and run func2() /*} 



/* Scheme initializes etc... */

这有可能吗?我觉得命名空间可能是个问题。这对我非常有用,因为它允许我不编写大量的冗余代码,因为我有很多类将Foo作为超类使用。

任何建议都是非常感谢的,如果你能给我举一个例子(也许在底层的球拍代码中有什么东西你可以给我指点?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-07 07:18:45

因此,解决这个问题的方法比我原先想象的要直接得多。谬误是,我想在另一个扩展中包括扩展,这是不必要的。关键是分别创建扩展,实现要公开给racket的每个函数,每个函数都引用指向对象的指针。例如:

Foo_ext.cpp (伪码)

代码语言:javascript
复制
static Foo * foo; 
Scheme_Object * create_foo(...) {
    foo = new Foo(); 
    return make_scheme_ptr(foo); 
} 

Scheme_Object * do_func1(..., Foo * f) 
{
     foo = f; 
     /* do func_1 stuff */ 
 } 

 /* ... Do scheme stuff... */ 

然后对bar_ext执行相同的代码。

这里的关键是,在希望使用扩展的racket脚本中,需要同时使用这两个扩展:

代码语言:javascript
复制
(require "Foo_ext.rkt") 
(require "Bar_ext.rkt")

; my_bar is the pointer to the bar created. 
(define my_bar (create_bar))

; Pass 11 and the my_bar pointer to func1 declared in Foo_ext  
(func1 11 my_bar)
; Pass 12 and the my_bar pointer to func2 declared in Bar_ext
(func2 12 my_bar)

她只写了这些..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21291994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档