-
Notifications
You must be signed in to change notification settings - Fork 28
Architecture: Meta classes
We use a system to attach declarative metadata to the data members of value classes. The intention is to minimize the number of places where the data members must be listed. Without this system, each class would need separate lists of its data members for operator<
, operator==
, stringification, streaming to DBus, streaming to JSON, etc. The meta class system maintains one list of members for each class, with optional metadata, and the methods can refer back to this one list.
In order for a class or class template to use the tuple system, it must include the SWIFT_METACLASS(..)
macro somewhere in its private:
section. This macro receives the class name, as well as a list of SWIFT_METAMEMBER(..)
or SWIFT_METAMEMBER_NAMED(..)
.
The SWIFT_METAMEMBER
macro expects at least one argument: the name of the member variable without the leading m_
prefix. It assumes that the datamember inside the class has this prefix! Further flags can be passed for each data member as described below.
SWIFT_METAMEMBER_NAMED
expects the same arguments as SWIFT_METAMEMBER
but also allows to pass in a string as a name used for serialization.
The following flags are supported
- DisabledForComparison: Do not use the member for comparison operations
- DisabledForMarshalling: Do not use the member when marshalling the class
- DisabledForDebugging
- DisabledForHashing: Do not use the member when hashing the class
- DisabledForJson: Do not add the member when serializing the class to JSON
- CaseInsensitiveComparison
- LosslessMarshalling
- RequiredForJson: Require the data member when deserializing from JSON
SWIFT_METACLASS(
CFoo,
SWIFT_METAMEMBER(orange, 0, DisabledForJson),
SWIFT_METAMEMBER(banana),
SWIFT_METAMEMBER_NAMED(apple, "apple_key")
)
In this example, metadata for the class CFoo
is added.
The class has three data member (m_orange
, m_banana
and m_apple
).
The "orange" data member is not used when serializing the class for JSON.
For "apple", a specific key name if serialized to JSON is specified (instead of using the auto-generated one).
- Home
- API documentation (Doxygen generated)
- Future of swift
- Style and Coding Standard
- Release Checklist
- Build swift
- Run swift as a developer
- Knowledgebase
- External resources
- Open Research Questions
- Aviation
- Programming
- Simulation
- Architecture