On 08/05/14 20:38, Adriano dos Santos Fernandes wrote:
> On 05/08/2014 08:20, Alex Peshkoff wrote:
>> I want to suggest a first draft of [very restricted] IDL implementation
>> for firebird that should solve all mentioned problems. As an additional
>> non-mentioned before feature it solves the problem of making interface
>> version upgrade compiler independent and reliable.
>>
>>
> I tried to make some adjustments on the implementation part (to not need
> to #include file multiple times)
Using lo-o-o-ng macros instead? Definitely possible, not sure is it
better or not. Long macro is well known debugging nightmare.
> , but I see a more big problem.
>
> The implementation rely on method shadowing.
>
> So if I have
>
> Impl : Interface
> {
> void method1()
> {
> method2();
> }
>
> method2()
> {
> }
> }
>
> and
>
> ImplSpecialization : Impl // Not supported by yours headers, but
> should be IMO
> {
> method2()
> {
> }
> }
>
> When calling method1() from ImplSpecialization instance, it will call
> Impl::method2 instead of ImplSpecialization::method2. Do you have some
> suggestion for this?
I've tried to emulate it and see no problems.
#include <stdio.h>
class xxx
{
public:
void fun() { printf("not get it - 1\n"); }
void zz() { printf("not get it - 2\n"); }
void (*statfun) (xxx*);
};
template <typename A>
class Base : public xxx
{
public:
Base()
{
statfun = sf;
}
void fun() { zz(); }
void zz() { printf("Base\n"); }
static void sf(xxx* ptr)
{
((Base*)ptr)->fun();
}
};
template<>
void Base<char>::zz() { printf("Spec\n"); }
int main()
{
Base<int> a;
Base<char> b;
printf("Direct:\n");
a.fun();
b.fun();
printf("Using static function:\n");
xxx* x = &a;
x->statfun(x);
x = &b;
x->statfun(x);
}
> I also think the version checks must be automatic at least in the C++
> API, but calling getVersion in each call is not good. Maybe we can
> always insert 10 or so pointers to notImplemented() method in the end of
> each vtable.
In general it's a way to nowhere - time may come when you need 11 new
methods.
In practice - each API has limited lifetime, memory is cheap, and if we
put _really_ big number of barrier functions - may be we do not need
getVersion() at all?
------------------------------------------------------------------------------
Infragistics Professional
Build stunning WinForms apps today!
Reboot your WinForms applications with our WinForms controls.
Build a bridge from your legacy apps to the future.
http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel