Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7971431
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 4, 20262026-06-04T07:38:18+00:00 2026-06-04T07:38:18+00:00

Can someone suggest a way to manipulate c++ objects with Cython, when the c++

  • 0

Can someone suggest a way to manipulate c++ objects with Cython, when
the c++ instance of one class is expected to feed the constructor of another wrapped
class as described below?

Please look at the note on the pyx file for the class PySession, which
takes a python PyConfigParams object as argument and then needs to
extract values from it in order to construct a c++ ConfigParams
object. the ConfigParams object is then used to feed the constructor
of Session.

It would be ideal to have a procedure which would allow me to “inject”
the ConfigParams c++ object wrapped by the PyConfigParams object
directly into the constructor of Session, without having to dismantle
it first and then building a new c++ object to feed the constructor.
This works, of course. However, it is a cumbersome, sort of brutal way to implement this solution, not to mention unreliable.

I am aware of PyCapsule, however it may require to touch the c++ headers, which is something I can not do.

Related to this, but a different question is: what if I need a wrapped
class (let’s say here PySession) to simulate the behavior of the C++
api by returning a ConfigParams instance? would I need to do the
reverse and dismantle the c++ object to build a Python PyConfigParams
which would then be returned to the Python user in the Python world?
Any suggestions are very welcome!
Thank you!

Let’s suppose I have two c++ classes named ConfigParams and Session.
An instance of ConfigParams is used to feed the constructor of the
Session class:

C++ classes

ConfigParams class

// ConfigParams.h
#include <iostream> 
using namespace std; 
class ConfigParams 
{ 
  int parameter1; 
 public: 
  ConfigParams(int par1) { this->parameter1 = par1;} 
  int getPar1() { return this->parameter1; } 
};

Session class

// Session.h 
#include <iostream> 
using namespace std; 
#include "configparams.h" 
class Session 
{ 
  int sessionX; 
 public: 
  Session(ConfigParams parameters) { this->sessionX = parameters.getPar1(); } 
  void doSomething(); 
}; 

void Session::doSomething() 
{ 
  cout << "Session parameters set as: " << endl; 
  cout << "X = " << this->sessionX << endl; 
} 

Cython pyx and pxd files for the above classes:

PyConfigParams

# configparams.pxd 
cdef extern from "configparams.h": 
    cppclass ConfigParams: 
        ConfigParams(int par1) 
        int getPar1() 

# configparams.pyx 
cdef class PyConfigParams: 
    cdef ConfigParams* thisptr 
    def __cinit__(self, i): 
        self.thisptr = new ConfigParams(<int> i) 
    def getPar1(self): 
        return self.thisptr.getPar1() 

PySession class

# session.pxd 
from configparams cimport * 
cdef extern from "session.h": 
    cdef cppclass Session: 
        Session(ConfigParams parameters) 
        void doSomething() 

# session.pyx
cdef class PySession: 
    cdef Session* thisptr 
    def __cinit__(self, pars): 
        # Note that here I have to extract the values 
        # from the pars (python PyConfigParams object) 
        # in order to build a c++ ConfigParams object 
        # which feeds the c ++ constructor of Session. 
        cdef ConfigParams* cpppargsptr = new ConfigParams(<int> pars.getPar1()) 
        self.thisptr = new Session(cpppargsptr[0]) 
    def doSomething(self): 
        self.thisptr.doSomething() 
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-04T07:38:19+00:00Added an answer on June 4, 2026 at 7:38 am

    Solution:

    Forward declare PyConfigParams in the configparams.pxd module (so it can be invoked from the session.pyx module)

    # configparams.pxd                                                                                                                                                                                                                                            
    cdef extern from "configparams.h":
        cppclass ConfigParams:
            ConfigParams(int par1)
            int getPar1()
    
    cdef class PyConfigParams:
        cdef ConfigParams* thisptr
    

    Import PyConfigParams in the session.pyx module, and cast the argument for the constuctor, this will grant access to the PyConfigParams pointer to the c++ object, which will need to be dereferenced.

    # session.pyx                                                                                                                                                                                                                                                 
    from configparams cimport PyConfigParams
    from cython.operator cimport dereference as deref
    
    cdef class PySession:
        cdef Session* thisptr
        def __cinit__(self, PyConfigParams pars):
            self.thisptr = new Session(deref(pars.thisptr))
        def doSomething(self):
            self.thisptr.doSomething()
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Can someone suggest me a way to map a template classes with a set
Can someone suggest a fast 2 way encryption algorithm for long ints? My candidates
can someone please suggest way to communicate between Air(Action script) App and node.js server?
Can someone suggest a good way to understand how MPI works?
Can someone suggest a way to compare the values of two dates greater than,
Can someone suggest an elegant way to solve the following problem please? I have
Can someone suggest a good module in perl which can be used to store
Can someone suggest me how to implement a pop-up window in Java Swing. I
Can someone suggest what I am doing wrong? Basically I have a List Items,
Can someone suggest how I can place a logo image on the top of

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.