首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于方法参数的Cppyy排除?

基于方法参数的Cppyy排除?
EN

Stack Overflow用户
提问于 2019-08-20 22:46:39
回答 1查看 55关注 0票数 1

是否可以根据CPPYY中的函数参数排除类方法?

例如,假设一个类有两个构造函数:

代码语言:javascript
复制
class A
{
 A(int);
 A(double);
};

是否可以选择A类,但排除两个构造函数中的一个?

选择和排除类/方法是使用gen反射实用程序完成的,它使用XML文件配置CPPYY。但是还不清楚XML文件是否支持这个级别的规范。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-21 15:45:57

为了完整起见,也在这里张贴:

不,不存在这样的特征。(将方法全盘排除是lcgdict规范的一部分,但我认为这一点甚至没有实现。)

如果您想将ctors减少到1,这在Python中是快速而简单的。示例:

代码语言:javascript
复制
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__选择的子集进行简单循环)。

或者,您也可以使用交叉继承来实现相同的目标。

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

https://stackoverflow.com/questions/57582406

复制
相关文章

相似问题

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