python - 具有默认实现的 boost-python 虚函数
问题描述
在 boost python 中公开一个非纯虚函数的推荐方法是如下所示包装它。
struct Base
{
virtual ~Base() {}
virtual int f() { return 0; }
};
struct BaseWrap : Base, wrapper<Base>
{
int f()
{
if (override f = this->get_override("f"))
return f(); // *note*
return Base::f();
}
int default_f() { return this->Base::f(); }
};
最后曝光:
class_<BaseWrap, boost::noncopyable>("Base")
.def("f", &Base::f, &BaseWrap::default_f)
;
该文件解释了
请注意,我们同时公开了
&Base::f
和&BaseWrap::default_f
。Boost.Python 需要跟踪 1) 调度函数 f 和 2) 转发函数到其默认实现 default_f。为此目的,有一个特殊的 def 函数。
这个特殊的 def 函数实际上是做什么的,下面有什么区别?
.def("f", &Base::f, &BaseWrap::default_f)
.def("f", &BaseWrap::default_f)
从源代码中class.hpp::def_impl
,我只看到default_f作为重载函数添加到命名空间也为&Base::f。由于相同的签名,default_f将替换&Base::f。
有什么我错过的吗?任何建议或示例都会有很大帮助!
解决方案
推荐阅读
- c# - Linq to mongodb:子查询条件下的意外行为
- scala - Spark Scala - 如何初始化一个包含 1000 列的空数据框
- ruby-on-rails - Ruby on Rails 正在更改表单中的 id 参数
- javascript - 无法从量角器读取整个本地/会话存储
- java - 更快的杰克逊不可能这么愚蠢(行尾)
- python-3.x - 如何将此命令翻译成 Python 3 语言?
- java - WSDL 创建解析错误
- c++ - 将二维向量传递给函数
- java - JsonMessage 无法解析为类型
- julia - Julia - 错误:LoadError:UndefVarError:绘图未定义