To make smart pointers a part of library (plain text)
- From: "Ilnur Quellendil" <ilnur tut by>
- To: gtk-devel-list gnome org
- Subject: To make smart pointers a part of library (plain text)
- Date: Tue, 20 Aug 2002 00:28:43 +0300
Sorry, reposting in plain text.
Good Day Everybody,
I have an idea, and the idea is, to create a hierarchy
of smart poinerts straight into the Gtk header files,
the hierarchy that grows together with the hierarchy of
objects. Why it's better than using additional C++
libraries? Because such wrappers will always be up-to-date,
and also... well, I just like this idea very much.
Now, that's what I meen:
For example, we have:
********************************************************
========================================================
/* parent.h */
#ifndef __PARENT_H
#define __PARENT_H
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _Parent Parent;
struct _Parent
{
int X;
};
int Parent_Play(Parent *p, int a);
#ifdef __cplusplus
}
#endif
#endif // __PARENT_H
========================================================
/* child.h */
#ifndef __CHILD_H
#define __CHILD_H
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _Child Child;
struct _Child;
{
Parent parent;
int Y;
};
int Child_Sing(Child *c, int a);
#ifdef __cplusplus
}
#endif
#endif // __CHILD_H
========================================================
********************************************************
And I'd like this files to look like that:
========================================================
********************************************************
/* parent.h */
#ifndef __PARENT_H
#define __PARENT_H
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _Parent Parent;
struct _Parent
{
int X;
};
int Parent_Play(Parent *p, int a);
#ifdef __cplusplus
}
#ifndef _PROHIBIT_WRAPPERS_
struct ParentPtr
{
Parent *ptr;
ParentPtr() {};
ParentPtr(Parent *src) { ptr = src; }
Parent *operator-> () { return ptr; }
int Play(int a) { return Parent_Play(ptr, a); }
};
#endif // _PROHIBIT_WRAPPERS_
#endif // __cplusplus
#endif // __PARENT_H
========================================================
/* child.h */
#ifndef __CHILD_H
#define __CHILD_H
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _Child Child;
struct _Child;
{
Parent parent;
int Y;
};
int Child_func(Child *c, int a);
#ifdef __cplusplus
}
#ifndef _PROHIBIT_WRAPPERS_
struct ChildPtr: public ParentPtr
{
ChildPtr() {};
ChildPtr(Child *src) { ptr = src; }
Child *operator-> () { return
reinterpret_cast<Child*>(ptr); }
int Sing(int a) { return
Child_Sing(reinterpret_cast<Child*>(ptr), a); }
};
#endif // _PROHIBIT_WRAPPERS_
#endif // __cplusplus
#endif // __CHILD_H
========================================================
********************************************************
Also there may be CPP-style typecast functions, namespaces
and everything...
Anton A. Bryl.
ilnur tut by
------
В связи с официальным открытием, интернет-кафе "СоюзONline", расположенное в
Центральном доме офицеров, делает подарок своим клиентам - 20%-ю скидку на
свои услуги до 15 сентября. Час работы в интернет от 1060 руб! Тел. 226-02-79
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]