基于方法参数的 Cppyy 排除?

Cppyy exclusion based on method arguments?

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

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

class A
{
 A(int);
 A(double);
};

是否可以 select class A 但排除两个构造函数之一?

选择和排除 classes/methods 是使用 genreflex 实用程序完成的,该实用程序使用 XML 文件来配置 CPPYY。但不清楚 XML 文件是否支持这种级别的规范。

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

不,不存在这样的功能。 (这是 lcgdict 规范的一部分,用于全面排除方法,但我认为这甚至没有实现。)

如果你想将 ctors 减少到 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__ 选择的子集进行简单循环)。

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