Ich mag Objekte in benutzerdefinierten Smart-Pointer in Python gewickelt belichten Boost :: PythonVerwenden von benutzerdefinierten Smart-Pointer im Boost-Python
Die Einsprüche
- bestehende Nutzung des benutzerdefinierten Smart Zeiger ist zu weit verbreitet zu wirtschaftlich auf den Boost Smart Pointer
- Ich möchte die automatische Dereferenzierung Technik wie in mehreren Standorten beschrieben
Das Problem ist, dass ich nicht scheinen kann, es richtig zu machen. Hier ist ein Beispielcode:
LegacyCode :: Ptr -> Legacy-Smart-Pointer-Code
LegacyCode :: Session -> Legacy-Objekt, das in der alten Smart-Pointer
namespace boost { namespace python
{
template <class T> T* get_pointer(LegacyCode::Ptr<T> const& p)
{
return p.get();
}
template <typename T>
struct pointee<LegacyCode::Ptr<T> >
{
typedef T type;
};
}}*
BOOST_PYTHON_MODULE(pyro)
{
using namespace boost::python;
class_<LegacyCode::Session,LegacyCode::Ptr<LegacyCode::Session>>("Session")
.def("get_type",&LegacyCode::Session::getType);
}
Um den unbekannten Grund zu beantworten, ist der 'const_cast' aufgrund der' Ptr'-Definition erforderlich, nicht wegen Boost.Python. 'Ptr' wendet' const' auf sein Element an, wenn 'Ptr' selbst' const' ist. Dies entspricht dem Unterschied zwischen const-pointer und pointer-to-const. Zum Beispiel macht 'shared_ptr' diese Unterscheidung im Typ selbst:' const shared_ptr 'und' shared_ptr '. –
Ich habe derzeit das folgende Problem: Die CGAL-Bibliothek hat eine Klasse, die im Grunde einen Zeiger (Handle) umschließt. Ich möchte es enthüllen, als ob es ein normales was auch immer-der-Griff-Punkte ist. Aber leider hat das Handle keine element_type Variable und daher bekomme ich immer Kompilierfehler. Irgendwelche Hinweise? – wolfv