The annotated C++ reference manual
The annotated C++ reference manual
Partial evaluation and automatic program generation
Partial evaluation and automatic program generation
CLOS in context: the shape of the design space
Object-oriented programming
Metaobject programming in CLOS
Object-oriented programming
The design and evolution of C++
The design and evolution of C++
Proceedings of the tenth annual conference on Object-oriented programming systems, languages, and applications
Non-intrusive object introspection in C++: architecture and application
Proceedings of the 20th international conference on Software engineering
Generative programming: methods, tools, and applications
Generative programming: methods, tools, and applications
Inside C#
Oracle Programming: A Primer, Version 8.0
Oracle Programming: A Primer, Version 8.0
Java RMI
Reflection Support by Means of Template Metaprogramming
GCSE '01 Proceedings of the Third International Conference on Generative and Component-Based Software Engineering
The any framework: a pragmatic approach to flexibility
COOTS'96 Proceedings of the 2nd conference on USENIX Conference on Object-Oriented Technologies (COOTS) - Volume 2
Hi-index | 0.00 |
Applications in an evolving computing environment should be designed to cope with varying data. Object-oriented programming, polymorphisms and parametric types often do not provide the required flexibility, which can be achieved with the use of metadata attached or extracted from objects by means of reflection. We present a general mechanism to support reflection in C++, exploiting template metaprogramming techniques. Metaclass objects are present at runtime and can be inspected to access information about objects, in particular about their fields. Metaobjects describing fields can be extended, through a mechanism similar to custom attributes in C#. The mechanism is self-reflective, allowing for metaclass objects to be described in turn. This allows storing and retrieving metaclasses from external storage and allows programs to understand and manipulate objects built by other programs. We present two case studies of the technique: building configuration objects and creating object-oriented interfaces to relational database tables.