如何创建SWIG接口文件?

2023-12-27

我是 SWIG 新手

而且做事的时间也少了。 我正在尝试将 C++ 类绑定到 python。 我已经在 Windows 中设置了 SWIG 并尝试运行它。成功了

我的 example.i 文件就像

/* File: example.i */
%module example

%{
#define SWIG_FILE_WITH_INIT
#include "Item.h"
}%
#include "Item.h"

但似乎它必须包含或声明头文件类、构造函数、模板等......

任何人都可以建议如何创建 SWIG 接口文件。

以下是我需要创建接口文件的头文件(Item.h)。

#ifndef __ITEM_H__
#define __ITEM_H__

#include <complex>
#include <functional>
#include <string>

template<typename T>
class Item
{
  std::string name_;
  T val_;

public:
  Item(std::string name, T val) : name_(name), val_(val) {}
  Item(Item<T> &rhs) : name_(rhs.name_), val_(rhs.val_) {}
  Item(const Item<T> &rhs) : name_(rhs.name_), val_(rhs.val_) {}
  ~Item() {}

  std::string name() const { return name_; }
  T operator()() const { return val_; }
  double norm() const { return sqrt(val_ * val_); }
};

template<>
class Item<std::complex<double> >
{
  std::string name_;
  std::complex<double> val_;

public:
  Item(std::string name, std::complex<double> val) : name_(name), val_(val) {}
  Item(Item<std::complex<double> > &rhs) : name_(rhs.name_), val_(rhs.val_) {}
  Item(const Item<std::complex<double> > &rhs) : name_(rhs.name_), val_(rhs.val_) {}
  ~Item() {}

  std::string name() const { return name_; }
  std::complex<double> operator()() const { return val_; }
  double norm() const { return sqrt(val_.real() * val_.real() + val_.imag() * val_.imag()); }
};

template<typename T>
struct ItemComparator : public std::binary_function<Item<T>, Item<T>, bool>
{
  inline bool operator()(Item<T> lhs, Item<T> rhs)
  {
    return lhs.norm() < rhs.norm();
  }
};

#endif

这是您的示例的接口文件。 SWIG 内置了对 std::string 和 std::complex 的支持。您必须通过 %template 声明要使用的模板的具体类:

%module Item

%{
#include "Item.h"
%}

%include <std_string.i>
%include <std_complex.i>
%include "Item.h"
%template(Int) Item<int>;
%template(Complex) Item<std::complex<double> >;

像这样使用它:

>>> import Item
>>> a=Item.Int('Int1',5)
>>> b=Item.Complex('Cplx1',2+3j)
>>> a.name()
'Int1'
>>> b.name()
'Cplx1'
>>> a.norm()
5.0
>>> b.norm()
3.605551275463989
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建SWIG接口文件? 的相关文章

  • Pygame读取MIDI输入

    我参考了Pygame MIDI 文档 https www pygame org docs ref midi html and 这段代码 https stackoverflow com questions 62983509 pygame mi
  • 使用 Django 的 post_save() 信号

    我有两张桌子 class Advertisement models Model created at models DateTimeField auto now add True author email models EmailField
  • 如何更改充当按钮的范围的文本

    我正在为自定义 Web 应用程序编写自动化测试 我遇到了无法更改跨度文本的问题 我尝试过使用 driver execute script 但没有运气 如果我更好地了解 javascript 这确实会有帮助 据我所知 您无法单击跨度 并且列表
  • 如何将条目中的部分文本加粗并更改其背景颜色?

    我正在创建一个基于 Tkinter 的 GUI 它有一个 Entry 小部件 我想将其文本的一部分加粗并更改其背景颜色 但我不知道我该怎么做 如果我使用文本小部件 我可以只使用标签 但看起来它们不能与条目小部件一起使用 此代码使用文本小部件
  • 在 Python 中使用 sec 函数的反函数

    我正在创建一个程序 用于计算从一定高度范围和设定初始速度发射射弹的最佳角度 在我需要使用的最终方程中 存在一个反 sec 函数 它导致了一些麻烦 我已经导入了数学并尝试使用 asec 无论如何 但是数学似乎无法计算反秒函数 我也明白 sec
  • NLTK、搭配问题:需要解包的值太多(预期为 2)

    我尝试使用 NLTK 检索搭配 但出现错误 我使用内置的古腾堡语料库 I wrote alice nltk corpus gutenberg fileids 7 al nltk corpus gutenberg words alice al
  • Python:当前目录是否自动包含在路径中?

    Python 3 4 通过阅读其他一些 SO 问题 似乎如果moduleName py文件位于当前目录之外 如果要导入它 必须将其添加到路径中sys path insert 0 path to application app folder
  • Python3 查找 2 个列表中有多少个差异才能相等

    假设我们有 2 个列表 always具有相同的长度和always包含字符串 list1 sot sot ts gg gg gg list2 gg gg gg gg gg sot 我们需要找到 其中有多少项list2应该改变 以便它等于lis
  • 如何使用 openpyxl 对工作簿中的 Excel 工作表/选项卡进行排序

    我需要按字母数字对工作簿中的选项卡 工作表进行排序 我在用openpyxl https openpyxl readthedocs io en default 操作工作表 您可以尝试排序workbook sheets list workboo
  • VSCode pytest 测试发现失败

    Pytest 测试发现失败 用户界面指出 Test discovery error please check the configuration settings for the tests 输出窗口显示 Test Discovery fa
  • Pandas:根据列名进行列的成对乘法

    我有以下数据框 gt gt gt df pd DataFrame ap1 X 1 2 3 4 as1 X 1 2 3 4 ap2 X 2 2 2 2 as2 X 3 3 3 3 gt gt gt df ap1 X as1 X ap2 X a
  • 字典中列表中仅有的几个索引的总和

    如果我有这种类型的字典 a dictionary dog white 3 5 black 6 7 Brown 23 1 cat gray 5 6 brown 4 9 bird blue 3 5 green 1 2 yellow 4 9 mo
  • 使用 python 将文本发送到带有逗号分隔符的列

    如何使用分隔符 在 Excel 中将一列分成两列 并使用 python 命名标题 这是我的代码 import openpyxl w openpyxl load workbook DDdata xlsx active w active a a
  • urllib2.urlopen() 是否实际获取页面?

    当我使用 urllib2 urlopen 时 我在考虑它只是为了读取标题还是实际上带回整个网页 IE 是否真的通过 urlopen 调用或 read 调用获取 HTML 页面 handle urllib2 urlopen url html
  • ValueError:无法插入 ID,已存在

    我有这个数据 ID TIME 1 2 1 4 1 2 2 3 我想按以下方式对数据进行分组ID并计算每组的平均时间和规模 ID MEAN TIME COUNT 1 2 67 3 2 3 00 1 如果我运行此代码 则会收到错误 ValueE
  • Python 矩阵每一行的总和

    lista 1 2 3 4 5 6 7 8 9 print lista def filas lista res for elemento in lista x sum lista elemento res append x print re
  • 具有指定置信区间的 Seaborn 条形图

    我想在 Seaborn 条形图上绘制置信区间 但我已经计算出置信区间 如何让 Seaborn 绘制我的置信区间而不是尝试自行计算它们 例如 假设我有以下 pandas DataFrame x pd DataFrame Group 1 0 5
  • 如何使用 Django (Python) 登录表单?

    我在 Django 中构建了一个登录表单 现在我遇到了路由问题 当我选择登录按钮时 表单不会发送正确的遮阳篷 我认为前端的表单无法从 查看 py 文件 所以它不会发送任何 awnser 并且登录过程无法工作 该表单是一个简单的静态 html
  • 如何识别图形线条

    我有以下格式的路径的 x y 数据 示例仅用于说明 seq p1 p2 0 20 2 3 1 20 2 4 2 20 4 4 3 22 5 5 4 22 5 6 5 23 6 2 6 23 6 3 7 23 6 4 每条路径都有多个点 它们
  • 使用 numpy 加速 for 循环

    下一个 for 循环如何使用 numpy 获得加速 我想这里可以使用一些奇特的索引技巧 但我不知道是哪一个 这里可以使用 einsum 吗 a 0 for i in range len b a numpy mean C d e f b i

随机推荐

  • Qt5.3 中 OpenGL 渲染之上的 QML UI

    我正在尝试在 Qt5 3 上的 openGL 渲染之上渲染 QML UI 到目前为止 QML 小部件具有黑色背景 而我希望有一个透明背景 我将代码展开在一个文件中 以便更容易阅读和编译 include
  • 比较整数和整数还是字符串和字符串更有效

    我有一个用 C 编写的程序 其中有很多整数和字符串之间的比较 所以出于性能原因 我只想知道哪个更有效率 如果我们有 int a 5 string b 5 if a int Parse b OR if a ToString b 我实际上使用一
  • ServiceStack 的路由路径

    我正在使用 AngularJS 我想在 ServiceStack serving static html 上执行以下路由 请注意拦截任意路径在屏幕截图上 另请注意 我没有将 ServiceStack 用于 REST 而是将其用作纯 Web
  • 在 C++ 中显示字符串向量

    如果这是一个重复的问题 我很抱歉 但我已经尝试寻找答案但空手而归 所以基本上我只想将字符串 单个单词 添加到向量的后面 然后将存储的字符串显示为单个字符串 我真是个菜鸟 include
  • 在 Mahapps.Metro 中设置 WindowButtonCommands 样式

    我想更改 WPF 应用程序的 最小 最大 和 关闭 按钮的样式 我在用着Mahapps Metro https github com MahApps MahApps Metro我已经成功地实现了我想要的结果 但只有过时的WindowMinB
  • 使用接口将数据从片段/活动传递到片段/活动的命名技术

    在学校 我们现在正在学习如何通过使用接口使片段更加通用 这项技术仍然有点抽象 我真的不知道何时 如何使用它 任何人都可以向我指出一些有关如何使用该技术的资源 可以称为接口回调吗 非常感谢所有帮助 The 回调方法 正如你所说的 就像List
  • 如何按索引从可变参数模板参数包中提取值?

    我想写一个函数magic get 它可以通过索引从参数包中提取值 例如 int n 0 n magic get lt 0 gt 1 3 5 7 assert 1 n n magic get lt 1 gt 1 3 5 7 assert 3
  • Fusebox 在代码中调用保险丝

    有谁知道是否可以在冷融合模板中调用融合动作 您尚未指定哪个 Fusebox 版本 此答案适用于 Fusebox 5 x 你的标题和问题是在问两个不同的事情 保险丝和保险丝是两个不同的东西 熔断器只是一个 CFML 模板 而熔断器动作代表执行
  • cout 是否保证具有 ctype 方面?

    Given auto foo ABCDEFGHIJKLMNOPQRSTUVWXYZ s我可以通过以下方式将所有字符转换为小写 use facet
  • Powershell - 如何保持跨会话加载导入的模块

    我有一堆使用通用 Powershell 库的不同脚本 自定义 PS 函数和 C 类的混合 这些脚本会定期自动执行 当加载每个脚本时 它会使用相当多的 CPU 来导入自定义模块 当所有脚本同时启动时 服务器的 CPU 运行速度为 100 有没
  • Angular Js - 在标头默认设置令牌

    我试图将带有我的访问令牌的标头添加到每个 API 调用中 它适用于所有 GET 请求 但当我尝试发出 POST 时 不会添加标头 这是我添加令牌的方法 app factory api function http cookies return
  • Tomcat 8 使用 Redis 进行会话复制

    Tomcat 8上可以用redis实现会话复制吗 我无法找到 tomcat 8 的 redis 会话管理器 jar 有一个现成的解决方案提供Redisson https redisson org框架 基于 Redis 的内存数据网格 使用方
  • Mongodb 有内存模式吗? [复制]

    这个问题在这里已经有答案了 可能的重复 运行集成测试时嵌入 MongoDB https stackoverflow com questions 6437226 embedded mongodb when running integratio
  • autocrlf 和 eol 有什么区别

    我正在阅读git 文档 https git scm com docs gitattributes about gitattributes解决我的混合行结尾问题并发现有两个类似的设置 自动回车 行尾转换 虽然 Git 通常保留文件内容 它可以
  • 在哪里可以找到 kafka 的 Maven 存储库?

    我想尝试 kafka 0 8 据我所知它已经发布了 但是我在哪里可以找到kafka maven存储库 我应该添加什么额外的存储库 URL 我发现了一些博客
  • 如何在执行 ./configure 时设置 ccshared=-fPIC?

    我正在尝试构建 Python 2 6QGIS http en wikipedia org wiki Quantum GIS on RHEL http en wikipedia org wiki Red Hat Enterprise Linu
  • 在Java中:在目录中创建唯一的随机文件名

    如何在 我选择的 目录中创建随机唯一文件名 Note 我不希望此文件位于系统临时路径中 而是位于我指定的目录中 File createTempFile https docs oracle com javase 6 docs api java
  • 在 uiwebview 中播放 YouTube 视频。如何处理“完成”按钮?

    我有一个 uiwebview 可以播放 youtube 视频 我如何处理完成按钮操作 现在 当我点击 完成 按钮时 它会变回我的应用程序主菜单 而不是应该关闭的菜单 并且它会冻结 有人可以帮我吗 ps uiwebview所在的菜单 之前是模
  • GTK 中的免费对象/小部件?

    我的 GTK 应用程序中有一个包盒 我每隔一段时间就会用一个全新的条目替换它 至少现在是这样 因为我很着急 由于我要用新实例替换它 我是否需要显式地从内存中释放旧包盒内容 或者 GTK 中是否有一些垃圾收集 如果我确实需要明确需要释放对象
  • 如何创建SWIG接口文件?

    我是 SWIG 新手 而且做事的时间也少了 我正在尝试将 C 类绑定到 python 我已经在 Windows 中设置了 SWIG 并尝试运行它 成功了 我的 example i 文件就像 File example i module exa