Re: [pygccxml-development] Function adaptors
Brought to you by:
mbaas,
roman_yakovenko
From: Berserker <ber...@ho...> - 2009-08-12 08:37:26
|
>> Is it possible to customize "virtual protected functions" and >> "pure virtual protected functions" as above to have control of the GIL? >> It seems that those templates are ignored in case of >> protected methods or I'm maybe missing something... > Can you show the use case? Sure :) Let's suppose that we have two classes in C++: JobsManager (a "Singleton" class) and an interface class of a Job. class JobsManager : public Singleton<JobsManager> { // ... public: void addJob(boost::shared_ptr<Job> j) { m_jobs.push_back(j); } void runJobs() { for(Jobs::const_iterator i = m_jobs.begin(); i != m_jobs.end(); (*i)->run(), ++i); } }; class Job { // ... public: void run() { onInit(); onRun(); } protected: virtual void onInit() { // ... } virtual void onRun() = 0; }; The "C++ framework" will load at startup all the python scripts where we can implement and register our custom jobs, something like: class MyJob(Job): def onInit(self): # ... Job.onInit(self) def onRun(self): # ... JobsManager.instance().addJob( myJobInstance ) The last step in C++ is to call JobsManager::instance().runJobs() (after loading all the python scripts), but this function call will be from C++ to Python (not from Python to C++ as "usual"), so we need to restore the correct PyThreadState where MyJob has been created: that's why I need a custom "base wrapper class" (where I save the PyThreadState in the constructor). Since I'm not a Python expert (this is my first experience with Python :) ), can you please help me, as suggested, in customizing the mem_fun_protected_v_wrapper_t and mem_fun_protected_pv_wrapper_t so that they will "share" the virtual_mem_fun/pure_virtual_mem_fun templates like in public virtual functions? Isn't possible to write something like: mem_fun_protected_v_wrapper_t.create_virtual_body = mem_fun_public_v_wrapper_t.create_virtual_body mem_fun_protected_pv_wrapper_t.create_virtual_body = mem_fun_public_vp_wrapper_t.create_virtual_body I just need to share the same code (in this way I don't have to deal with Py++ internals). What about adding two more templates for protected functions instead? Bye _________________________________________________________________ Taglia i costi con Messenger! Chiama e videochiama da PC a PC! http://www.messenger.it/videoconversazioni.aspx |