cppyy - 基于方法参数的 Cppy 排除?
问题描述
可以根据函数参数在 CPPYY 中排除类方法吗?
例如,假设一个类有两个构造函数:
class A
{
A(int);
A(double);
};
是否可以选择 A 类但排除两个构造函数之一?
选择和排除类/方法是使用genreflex 实用程序完成的,该实用程序使用XML 文件来配置CPPYY。但不清楚 XML 文件是否支持这一级别的规范。
解决方案
为了完整起见,也在这里发布:
不,不存在这样的功能。(排除方法批发是 lcgdict 规范的一部分,但我认为这甚至没有实现。)
如果您想将 ctor 减少到 1,这在 Python 中既快速又简单。例子:
import cppyy
cppyy.cppdef("""
class A
{
public:
A(int) { std::cerr << "int called" << std::endl; }
A(double) { std::cerr << "double called" << std::endl; }
};
""")
def pythonize_A(klass, name):
if name == 'A':
klass.__init__ = klass.__init__.__overload__("int")
cppyy.py.add_pythonization(pythonize_A)
from cppyy.gbl import A
a = A(1)
b = A(1.) # <- fails with TypeError
原则上,您甚至可以编写一个自定义__init__
,对您想要保留的构造函数进行重载(例如,对使用选择的子集进行简单循环__overload__
)。
或者,您可以使用交叉继承来实现相同的目的。
推荐阅读
- css - jekyll 主题 CSS 在 github io 页面中不起作用
- http - 后缀日志:来自未知 IP 地址的非 SMTP 命令,“GET /aaa9 HTTP/1.1”
- javascript - 同时执行两个方法
- java - Java:对象数组,两种不同的初始化方法
- jquery - Jquery如何遍历JSON数组并不断添加值
- laravel - Laravel 没有向我的 Vue.js 前端发送推送事件
- macos - 如何通过 ssh 从 mac 主机连接 KVM 来宾 vm?
- reactjs - 即使“@stripe / react-stripe-js”文件存在,也会发生错误
- python - 在python中将数据字典转换为numpy数组
- azure - 使用 cordova http 的 Azure 见解不起作用