type and static type

General discussion for topics related to the FreeBASIC project or its community.
nastasa eodor
Posts: 182
Joined: Dec 18, 2018 16:37
Location: Germany, Hessdorf
Contact:

Re: type and static type

Post by nastasa eodor »

dodicat wrote:For fun your first post without static methods.

Code: Select all

type QObject extends Object
    as string ClassName
    as integer ID
end type

type QStaticObject extends QObject
    static as QObject ptr AnObject
   
    declare  function ID_get as integer
    declare  sub ID_set(as integer)
    declare  function ClassName_get as string
    declare  sub ClassName_set(as string)
   
    declare operator let(as string)
    declare operator let(as integer)
    declare operator cast as string
    declare operator cast as integer
   
    declare operator cast as any ptr
    declare operator cast as QObject
    declare constructor
end type


declare function Id_get alias "_ZN13QSTATICOBJECT6ID_GETEv"(as QStaticObject)  as integer
#ifdef __FB_64BIT__
declare sub ID_set alias "_ZN13QSTATICOBJECT6ID_SETEu7INTEGER"(as QStaticObject,as integer)
#else
declare sub ID_set alias"_ZN13QSTATICOBJECT6ID_SETEl"(as QStaticObject,as integer)
#endif 
declare  function ClassName_get alias "_ZN13QSTATICOBJECT13CLASSNAME_GETEv"(as QStaticObject)as string
declare  sub ClassName_set alias "_ZN13QSTATICOBJECT13CLASSNAME_SETER8FBSTRING"(as QStaticObject,as string)

dim QStaticObject.AnObject as QObject ptr

constructor QStaticObject
    QStaticObject.AnObject=@this
end constructor

function QStaticObject.ID_get as integer
    return AnObject->id
end function

function QStaticObject.ClassName_get as string
    return AnObject->ClassName
end function

sub QStaticObject.ClassName_set(v as string)
    AnObject->ClassName=v
end sub

sub QStaticObject.ID_set(v as integer)
    AnObject->id=v
end sub


operator QStaticObject.let(v as string)
    classname=v
end operator

operator QStaticObject.let(v as integer)
    id=v
end operator

operator QStaticObject.cast as string
    return classname
end operator

operator QStaticObject.cast as integer
    return id
end operator

operator QStaticObject.cast as any ptr
    return @this
end operator

operator QStaticObject.cast as QObject
    return this
end operator

dim shared as QStaticObject so

? @id_get,@id_set
? QStaticObject.AnObject

so.classname="dummy"
so.id=1

? so.classname
? so.id

so.id_set(2)
? so.id

so.classname="dummy"
so.id=1

so.classname_set("dummy_1")
? so.classname

classname_set(so,"dummy_static")
? so.classname,classname_get(so)

dim shared as sub(as QStaticObject,as string) str_setter
 str_setter=@classname_set

str_setter(so,"i've done folks...")
? so.classname,classname_get(so)

so="Test_static_type"
? so

so=10
? so.id, id_get(so), qstaticobject

sleep
 
The help file says for extern....end extern
Extern "C++" blocks are exactly like Extern "C" blocks but they also mangle the names declared within them in a way compatible to that of g++-4.x.
But using the C++ demangle :
#define demangle(s) shell "C++filt "+(s)
The demangled functions do not work in an extern "C++" block in fb.
nice...
Post Reply