Re: vfunc question



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Ah, thanks!

I simply have done to much in this damn stupid C API...

Regards,
Johannes

Murray Cumming wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Hi!
>>
>> After being able to load my C++ plugin in Anjuta I have a problem
>> calling it's activate function.
>>
>> bool activate() is a virtual function wrapped using _WRAP_VFUNC().
>> However, the C code calls klass->activate which ends up calling
>> Anjuta::Plugin::activate_vfunc_callback which then calls
>> Plugin::activate_vfunc().
>>
>> Anyway, activate_vfunc() contains
>>
>> bool Anjuta::Plugin::activate_vfunc()
>> {
>>   BaseClassType *const base = static_cast<BaseClassType*>(
>>       g_type_class_peek_parent(G_OBJECT_GET_CLASS(gobject_)) // Get the
>> parent class of the object class (The original underlying C class).
>>   );
>>
>>   if(base && base->activate)
>>     return (*base->activate)(gobj());
>>
>>   typedef bool RType;
>>   return RType();
>> }
>>
>> But this code will never ever calls the overridden activate() function
>> of my derived SamplePlugin class.
> 
> An activate() function in your derived class has nothing to do with this.
> To  override the "activate" vfunc (technically a function pointer in the C
> struct) in a gtkmm class, you must override activate_vfunc().
> 
> The _vfunc() suffix was added in gtkmm to avoid clashes with similarly
> named methods. For instance, a GTK+ widget can have a vfunc called
> something and a method called something. It's not a clash in C:
> 
> struct Example
> {
> ...
> }
> 
> struct Example_Class
> {
> ...
>   void (*something)(Example*, int)
> }
> 
> example_something(Example* example, double a, double b)
> 
> 
>> Is this intended? I feel that I
>> completely misunderstand some things with virtual functions because what
>> I want is that klass->activate() ends up calling SamplePlugin::activate().
> 
> So your knowledge of the C API is the problem. Just override the C++
> virtual method that exists.
> 
> Murray Cumming
> murrayc murrayc com
> www.murrayc.com
> www.openismus.com
> 
> 
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFFEo517Dsf+G5b/WsRAogxAKCbyjqgTAJ/sRODAPhYsr+e15ZmkgCfbpdw
xnnSvh0Tf+LHxoTytvYIrOw=
=ciKU
-----END PGP SIGNATURE-----



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]