[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-bindings
Subject:    Re: [Kde-bindings] Get a pointer to SmokeBinding
From:       Arno Rehn <arno () arnorehn ! de>
Date:       2013-01-15 18:47:59
Message-ID: 50F5A45F.3080108 () arnorehn ! de
[Download RAW message or body]

On 15/01/13 17:54, j j wrote:
> > I see. This will be supported in smokev4, but not the current Smoke.
> 
> Is it already supported in current versions of smokev4? If so, how do I \
> use it?
Yep. When you use SmokeMethod::call to call a method you can pass along 
a flag which decides whether to use dynamic dispatching or a direct 
method call.

> > What are you doing with Smoke? I'm interested in every project using it \
> > :)
> 
> My goal is to write a program that will automatically generate D (
> http://dlang.org) bindings for Smoke libraries such as smokeqt. I'm
> currently only learning to use Smoke and trying to come up with a good
> design for generating class hierarchies, etc. I can't promise anything \
> will actually come out of it :D.
Interesting :)
So if you're starting from scratch anyway, I'd suggest you use smokev4 
right from the beginning. The API might not be stable as of now, but for 
a new project it should be fine :)

> On Tue, Jan 15, 2013 at 3:28 PM, Arno Rehn <arno@arnorehn.de> wrote:
> 
> > On 15/01/13 00:19, j j wrote:
> > 
> > > But if there's a valid use-case I wouldn't object to implementing \
> > > this in
> > > > 
> > > smokev4.
> > > 
> > > I'm only learning to use Smoke, so maybe what I want to do can be \
> > > achieved in some other way. I wan't to be able to call the most \
> > > derived method given
> > > a Smoke object.
> > > 
> > > Say I have a Smoke object foo of type Foo, on which I have set a
> > > SmokeBinding bind which overrides bar(). Now say I call foo's method \
> > > bar() thorugh the Smoke api. It seems that this results in Foo.bar \
> > > being called directly, without bind->callMethod() being called first. \
> > > I could call the most derived method if I could get to the binding \
> > > instance, but if there's a better way to do it, I'd love to hear \
> > > about it. 
> > I see. This will be supported in smokev4, but not the current Smoke.
> > Currently we assume that if you create a smoke object, the target \
> > language takes care of virtual method resulution and if you call a \
> > virtual method through the Smoke API, you really want to call the \
> > original C++ method. 
> > Now you could do some nasty pointer arithmetic for the time being. The
> > SmokeBinding* pointer is simply appended to the original class and we \
> > have size information in Smoke. So something like this could work:
> > 
> > char *ptr = reinterpret_cast<char*>(**smokeObject) + smokeClass->size;
> > SmokeBinding *bind = *reinterpret_cast<**SmokeBinding**>(ptr);
> > 
> > Note that this is probably undefined behaviour per se ;)
> > 
> > What are you doing with Smoke? I'm interested in every project using it \
> > :) 
> > 
> > --
> > Arno Rehn
> > ______________________________**_________________
> > Kde-bindings mailing list
> > Kde-bindings@kde.org
> > https://mail.kde.org/mailman/**listinfo/kde-bindings<https://mail.kde.org/mailman/listinfo/kde-bindings>
> >  
> 
> 
> 
> _______________________________________________
> Kde-bindings mailing list
> Kde-bindings@kde.org
> https://mail.kde.org/mailman/listinfo/kde-bindings
> 


-- 
Arno Rehn
_______________________________________________
Kde-bindings mailing list
Kde-bindings@kde.org
https://mail.kde.org/mailman/listinfo/kde-bindings


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic