[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Savannah-register-public] [task #4921] Submission of idioskopos
From: |
Rick L. Vinyard Jr. |
Subject: |
[Savannah-register-public] [task #4921] Submission of idioskopos |
Date: |
Sat, 12 Nov 2005 12:12:37 -0700 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8) Gecko/20051106 Fedora/1.5-0.5.0.rc1 Firefox/1.5 |
URL:
<http://savannah.nongnu.org/task/?func=detailitem&item_id=4921>
Summary: Submission of idioskopos
Project: Savannah Administration
Submitted by: rvinyard
Submitted on: Sat 11/12/05 at 12:12
Should Start On: Sat 11/12/05 at 00:00
Should be Finished on: Tue 11/22/05 at 00:00
Category: Project Approval
Priority: 5 - Normal
Status: None
Privacy: Public
Assigned to: None
Percent Complete: 0%
Open/Closed: Open
Effort: 0.00
_______________________________________________________
Details:
A new project has been registered at Savannah
The project account will remain inactive until a site admin approve or
discard the registration.
######### REGISTRATION ADMINISTRATION #########
While this item will be useful to track the registration process, approving
or discarding the registration must be done using the specific "Group
Administration" page, accessible only to site administrators, effectively
logged as site administrators (superuser):
<https://savannah.nongnu.org/admin/groupedit.php?group_id=8116>
######### REGISTRATION DETAILS #########
Full Name:
----------
idioskopos
System Group Name:
-----------------
idioskopos
Type:
-----
non-GNU software & documentation
License:
--------
GNU Lesser General Public License
Description:
------------
idioskopos (Greek: idio- inward, within, private; -skopos look, aim,
target) is a C++ library that adds object reflect and introspection.
The code is available at:
http://miskatonic.cs.nmsu.edu/idioskopos-0.1.0.tar.gz
There are numerous libraries that provide object introspection, but are
generally part of some framework such as:
* Glib's gobject
* Gtkmm's Glib::Object
* VCF's object class
* QT's introspective objects
* PUMA
* OpenC++
* et. al.
There is at least one other library that provides property management;
libpropc++ at:
http://ex-code.com/propcpp/
Support for object reflection and introspection are 'hot' topics in C++ and
already have some groups pushing for inclusion in the next ANSI/ISO C++
standard.
So, why does the world need yet another library supporting reflection and
introspection? It probably doesn't, but the reason I decided to create one
anyway was due to the fact that the current approaches suffer from one of the
following issues:
1. Dependency on a large framework; to use the introspective features of a
library like gobject or VCF's objects you need to add a dependency on the
framework, which can be quite large.
2. Preprocessors; approaches such as that taken by QT and PUMA require a
preprocessor that adds reflection support. This is probably the cleanest
approach, but IMHO not as simple and straightforward if all you want is basic
reflection/introspection support.
3. Not free; If you take a look at the libpropc++ library the code is
released under the LGPL, but the author's statements regarding what the LGPL
means are wrong. I have observed several interactions with the author and
developers on the Gtkmm lists and he obviously doesn't get the meaning of
free as in freedom. Thus, the library is released under the LGPL, but it has
a 'cloud' about it that keeps others from using it.
So, without further ado, the idioskopos library is based heavily on the
approach taken in Gtkmm to wrap the gobject interface. However, it is a
standalone library and depends only on libsigc++ and boost.
The following illustrates the code necessary to create reflective properties:
a static property x and a dynamic property y.
class Example: public Object {
public:
Example::Example();
Property<double> x;
};
Example::Example():
x(*this, "x", 2.0),
{
create_property<double>("y", 1.0);
}
Introspection can be accomplished with:
cout << "All properties in class Example:\n";
for (i = e.get_properties().begin(); i != e.get_properties().end(); i++)
cout << "\t" << i->first << "\tType: " << i->second->type().name() <<
std::endl;
Other Software Required:
------------------------
These are pretty normally found in all distributions, but I'll list them
for completeness:
libsigc++
boost shared pointer (now actually in gcc)
_______________________________________________________
Reply to this item at:
<http://savannah.nongnu.org/task/?func=detailitem&item_id=4921>
_______________________________________________
Message sent via/by Savannah
http://savannah.nongnu.org/
- [Savannah-register-public] [task #4921] Submission of idioskopos,
Rick L. Vinyard Jr. <=