环境:使用Python 3.5编译Boost 1.61.0
以下C ++代码输出12
:
class A
{
public:
int func() { return 12; }
};
BOOST_PYTHON_MODULE(bridge)
{
using namespace boost::python;
class_<A>("A", no_init)
.def("func", &A::func);
}
int main()
{
A a;
PyImport_AppendInittab("bridge", PyInit_bridge);
Py_Initialize();
using namespace boost::python;
dict dictMain = extract<dict>(import("__main__").attr("__dict__"));
import("bridge").attr("a") = boost::ref(a);
exec("import bridge", dictMain);
exec("print(bridge.a.func())", dictMain);
}
但是,如果我将boost::ref
替换为std::ref
,则会抛出boost::python::error_already_set
个实例。
为什么std::ref
不能在这里使用?
答案 0 :(得分:0)
关于https://facebook.github.io/react/tips/initial-ajax.html的好文章。我认为python是异常AttributeError
的任何方式,因为handling python exceptions in C++和std库中的reference_wrapper
实现存在差异。即使在公共界面中也可以看到差异。 std::reference_wrapper
没有get_pointer()
方法。