I'm creating an abstraction layer to work with C++, thought you might be interested. Attached are the files required to use it. What it does should be apparent by reading from the top of main () and running the code, you might have to redirect the 4 #includes if you set up your directory structure differently from me.
Note stuff.h only contains one function that is required. The program uses an object called obj to achieve the things it does, it does not add this functionality into the bottom level of C++.
The key concepts of an obj include:
Access members of objects using std::string's
Strings can be transferred and stored a lot more easily than types.
They can also be combined more easily, a trivial example is ".toString" being made of two parts.
Finally they can easily be used as parameters so a function could take some data and member names as parameters.
Individual obj members can be added and removed one at a time.
One member function can easily be used by several different types.
A function can look at aspects of the object it belongs to in order to work out how to behave without any problems or inconsistencies created by the underlying workings of C++.
There is no need for all the empty (or otherwise meaningless) member functions that occur near the top of the tree in programs with lots of inheritance, although inheritance possibilities work differently the same sorts of results can be achieved just as easily with less code.
CSS like parameters with names and values where any number of them can be used without having to specify the information in advance.
Uses boost::any's extensively but you don't have to wrap and unwrap them yourself, less needing to repeat and know definite information about types all the time.
Little difference between accessing different types of members such as objects or functions.
Want obj's to behave in a fundamentally different way, write members yourself for object without having to edit my files and add them to obj's you create.