How to expose custom data types using Boost.Python

General Tech Bugs & Fixes 2 years ago

0 1 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on Bugs & Fixes related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (1)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 2 years ago

 

I am wondering how to expose custom data types using Boost.Python.

For example, say I have a custom datatype called custom_number:

typedef struct 
{
    PyObject_HEAD
    int x;
} custom_number;

static int custom_number_init(PyObject *self, PyObject *args, PyObject *kwds)
{
    static char* nams[] = {"x", NULL};
    int x;
    if(!PyArg_ParseTupleAndKeywords(args, kwds, "i", nams, &x))
        return -1;

    ((vector*)self)->x = x;

    return 0;
}

static PyObject *custom_number_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
    vector *self;
    self = (vector *) type->tp_alloc(type, 0);
    if (self != NULL) 
    {
        self->x = 0;
    }

    return (PyObject *) self;
}

static void custom_number_dealloc(PyObject *self)
{
    self->ob_type->tp_free(self);
}

static PyMemberDef custom_number_members[] = {
    {"x", T_INT, offsetof(vector, x), 0, "silly number!" },
    {NULL}
};

static PyTypeObject custom_number_Type = {
    PyVarObject_HEAD_INIT(NULL, 0)
    .tp_name = "vector",
    .tp_basicsize = sizeof(custom_number),
    .tp_itemsize = 0,
    .tp_dealloc = (destructor) custom_number_dealloc,
    .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,       
    .tp_doc = "custom_number type",  
    .tp_members = custom_number_members,     
    .tp_init = (initproc)
                                                
                                                
0 views
0 shares

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.