About IOPC2

IOPC2 is a library providing object-relational mapping services for programs written in C++.

It represents a solid, flexible and extensible platform for rapid C++ database application development. Thanks to its modular architecture, the library can be used in several standalone configurations (libraries) providing subsets of implemented services:

  • Database access library - provides basic database access, SQL DDL/DML execution and resultset retrieval.
  • Reflection library - provides a reflection API that allows developers to examine the structure of application classes at run-time.
  • Object persistence library - provides full functionality of the IOPC 2 library. Its features include object persistence (ORM), persistent object caching, direct database access, reflection and other (see the documentation). The following database mapping types are supported:
    • Vertical - one table per class.
    • Horizontal - one table per class, no table inheritance.
    • Filtered - one table per class hierarchy.
    • ADT - uses object-relational features of the Oracle database (Oracle Objects). Creates an ADT type hierarchy that has same structure as persistent classes that use this mapping type. Instances of persistent classes are then mapped into instances of these ADT types.
    • Any allowed combination - see the documentation.

IOPC2 uses GCCXML to get description of the class model used in the user application and to simulate the reflection. To parse the XML files generated by GCCXML, Apache Xerces-C++ is used. Currently, only Linux port is available. As no other external dependencies are used (except for particular database drivers), porting the library to other operating system should be possible.


IOPC2 is a successor of the following projects developed at Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague:

  • POLiTe
  • POLiTe 2 - an enhancement of the POLiTe library which was not yet published.
  • IOPC