【发布时间】:2011-03-11 00:34:42
【问题描述】:
我目前正在重构一个用 C++ 编写的 Tcl 插件库。最初的代码是手写的。存在第二个库,它为 Java 做同样的事情。
重构后的库将是一个单一的 C++ 库,可用于创建与不同语言的绑定。
我对 SWIG 的第一次测试很有希望。但是,也会产生很多垃圾。各种基类和实用程序都被导出。从脚本的角度来看,这些没有意义,只会增加混乱。
我能想到的可能解决方案是:
- 在原始代码库中使用
#ifndef SWIG过滤掉不需要的代码 - 围绕 API 类创建一个与 SWIG 兼容的包装器。
- 区分公共标头和专用标头。公共标头是不包含任何实现的纯抽象基类。私有标头继承并实现它们。仅 SWIG 公开标头。
- 与上述解决方案相反:为每个 API 类继承一个与 SWIG 兼容的类。
我目前倾向于解决方案 3。但是,我不太确定,所以我想知道 SO 社区对此的看法。欢迎分享您的想法。
更新
我忘了列出一个解决方案:
- 不应由 SWIG 导出的代码可能不应该出现在您班级的公共部分中。
也许这就是答案。星期一我再看看。
更新
我找到了一个解决方案。看我的回答。
【问题讨论】: