opC++ is a code generation tool with a number of useful features included, and a great deal of versatility:
- Reflection and Serialization via the Standard Dialect (optional).
- Extended C++ Syntax.
- Ability to add code features via Dialects.
- Useful Multi-file output.
- Easy Integration along-side Existing C++.
opC++ is written to be useful normal C++ programmers.
- Standard opC++ uses a few basic keywords, but otherwise reads like C++.
- Dialect files use simple understandable syntax.
- opC++ output descriptive, often custom errors.
- opC++ addin helps to navigate complex generated code.
Our motivation for creating opC++ came from years of experience creating and working with game engines. We identified some of the issues commonly faced working with C++ based gameplay code, and have gradually come up with a number of language extension based solutions. Most of these solutions are also applicable outside the game industry for anyone using C++. Some of the issues we address with opC++ include...
- Scripting Barriers: If we can implement most of the benefits of scripting languages in C++, we can eliminate the need to keep mirrored interfaces in sync. Not to mention the performance implications.
- Error-Prone Busywork: Often to implement a class registration pattern you have to rewrite types, we eliminate much of the hassle and busywork by generating this information automatically.
- Data Reflection: Data reflection is important in games - we've used it to provide documentation generators, to help automate bindings (networking, serialization), and to help extend the usefulness of game scripts.
- Data Tagging: Features like xml tag attributes and meta-data help automate common features such as serialization, loading and saving games, and custom editor integration.
- Poor Modularity: Patterns like abstract traits, interfaces, and mixin's have known advantages for modular design - but not very good support in C++.
- Forgetfulness: Many of the issues w/ C++ are related to the single pass compilation process.