首页 > 解决方案 > 使基类受保护成员成为pybind11中的只读参数

问题描述

给定以下代码结构,由 Parent-Child 类模板BaseParameterParameter. 我想在 Python 中将_value成员设为BaseParameter只读属性。

pybind 给出以下错误

.def_property_readonly("value", &Parameter<double>::value);

“不允许指向类型为“const double &”的成员的指针”

有没有更干净的方法来做到这一点,而不是必须访问value,因为我不能这样做,&Parameter<double>::_value因为它无法访问。

注意:BaseParameter由于其在 C++ 中的功能,该类必须保持原样(对我项目中的其他代码)

template<typename T>
class BaseParameter {
protected:
    T _value;
public:
    const T& value = _value;
};

template <typename T>
class Parameter;

// Specify a Parameter type
template<>
class Parameter<double> : public BaseParameter<double> {
public:
    /*  Code here */
};

// Expose Only Parameter (and its variants) to Python
class PyParameter : public Parameter<double> {

public:
    /*  Code here */
};

py::class_<Parameter<double>, PyParameter> PAR(m, "Parameter");
PAR
    .def_property_readonly("value", &Parameter<double>::value);

标签: c++pybind11

解决方案


推荐阅读