MUSX Document Model
Loading...
Searching...
No Matches
TypeRegistry.h
1/*
2 * Copyright (C) 2025, Robert Patterson
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal
6 * in the Software without restriction, including without limitation the rights
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 * copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 * THE SOFTWARE.
21 */
22#pragma once
23
24#include <array>
25#include <memory>
26#include <string>
27#include <tuple>
28
29#include "musx/dom/ObjectPool.h"
30#include "musx/dom/BaseClasses.h"
31#include "musx/dom/CommonClasses.h"
32#include "musx/dom/Options.h"
33#include "musx/dom/Others.h"
34#include "musx/dom/Details.h"
35#include "musx/dom/Graphics.h"
36#include "musx/dom/Ossia.h"
37#include "musx/dom/ShapeDesigner.h"
38#include "musx/dom/SmartShape.h"
39#include "musx/dom/Staff.h"
40#include "musx/dom/Entries.h"
41#include "musx/dom/Texts.h"
42#include "musx/xml/XmlInterface.h"
43#include "FieldPopulatorsOptions.h"
44#include "FieldPopulatorsOthers.h"
45#include "FieldPopulatorsDetails.h"
46#include "FieldPopulatorsEntries.h"
47#include "FieldPopulatorsTexts.h"
48
49#ifdef _MSC_VER
50# pragma warning(push)
51# pragma warning(disable : 4244) // disable spurious warnings due to overzealous MSC checking paths that are protected by constexpr
52#endif
53
54namespace musx {
55namespace factory {
56
65template <typename... Types>
67{
68private:
69 using VariantType = std::variant<Types*...>;
70 using Base = dom::Base;
71
78 static inline const auto registry = []() {
79 return std::unordered_map<std::string_view, VariantType>{
80 {Types::XmlNodeName, VariantType(static_cast<Types*>(nullptr))}...
81 };
82 }();
83
92 static std::optional<VariantType> findRegisteredType(std::string_view nodeName)
93 {
94 const auto it = registry.find(nodeName);
95 if (it == registry.end()) {
96 return std::nullopt;
97 }
98 return it->second;
99 }
100
102 template <typename T, typename PoolPtr, typename... Args>
103 static auto getScoreValue(const PoolPtr& pool, Args&&... args)
104 {
105 if constexpr (std::is_same_v<PoolPtr, ::musx::dom::OthersPoolPtr> || std::is_same_v<PoolPtr, ::musx::dom::DetailsPoolPtr>) {
106 return pool->template get<T>(SCORE_PARTID, std::forward<Args>(args)...);
107 } else {
108 return pool->template get<T>(std::forward<Args>(args)...);
109 }
110 }
111
112public:
115 template <typename T>
116 struct is_registered_type : std::disjunction<std::is_same<T, Types>...> {};
117
120 template <typename T>
122
126 {
128 CreatedInstanceInfo(std::shared_ptr<Base> inst, std::string_view nodeName)
129 : instance(inst), xmlNodeName(nodeName) {}
130
131 std::shared_ptr<Base> instance;
132 std::string_view xmlNodeName;
133 };
134
149 template <typename PoolPtr, typename... Args>
150 static std::optional<CreatedInstanceInfo> createInstance([[maybe_unused]]const PoolPtr& pool, const XmlElementPtr& node, ElementLinker& elementLinker, const DocumentPtr& document, Args&&... args)
151 {
152 auto typePtr = TypeRegistry::findRegisteredType(node->getTagName());
153 if (!typePtr.has_value()) {
154 return std::nullopt; // Type not yet implemented
155 }
156
157 return std::visit(
158 [&](auto const& ptr) -> CreatedInstanceInfo {
159 using T = std::remove_pointer_t<std::remove_reference_t<decltype(ptr)>>;
160 // Only enable this part if T is constructible with Args...
161 if constexpr (std::is_constructible_v<T, const DocumentPtr&, Cmper, Base::ShareMode, Args...>) {
162 auto partAttr = node->findAttribute("part");
163 Cmper partId = partAttr ? partAttr->getValueAs<Cmper>() : SCORE_PARTID; // zero is the score ID
164 auto shareMode = Base::ShareMode::All;
165 if (auto shareAttr = node->findAttribute("shared")) {
166 shareMode = shareAttr->getValueAs<bool>() ? Base::ShareMode::Partial : Base::ShareMode::None;
167 }
168 auto instance = std::make_shared<T>(document, partId, shareMode, std::forward<Args>(args)...);
169 if constexpr (!std::is_same_v<PoolPtr, ::musx::dom::EntryPoolPtr>) {
170 if (instance->getShareMode() == Base::ShareMode::Partial) {
171 for (auto child = node->getFirstChildElement(); child; child = child->getNextSibling()) {
172 instance->addUnlinkedNode(child->getTagName());
173 }
174 auto scoreValue = getScoreValue<T>(pool, std::forward<Args>(args)...);
175 if (scoreValue) {
176 *instance = *scoreValue;
177 } else {
178 throw std::invalid_argument("Score instance not found for partially linked part instance");
179 }
180 }
181 }
182 factory::FieldPopulator<T>::populate(instance, node, elementLinker);
183 return CreatedInstanceInfo(instance,T::XmlNodeName);
184 } else {
185 assert(false); // This path should never actually be taken, but it is required for std::visit.
186 throw std::logic_error("Type for " + node->getTagName() + " is not constructible with given arguments");
187 }
188 },
189 typePtr.value()
190 );
191 }
192};
193
228>;
229
240 dom::others::OssiaBounds, // this was possibly internally "arbitBounds" at one time, which may be why it serializes here
241 dom::others::OssiaHeader, // this was possibly internally "arbitHeader" at one time, which may be why it serializes here
242 dom::others::OssiaMusic, // this was possibly internally "arbitMusic" at one time, which may be why it serializes here
257 dom::others::SystemLock, // xml node is "lockMeas", which is still sequenced non-alphabetically
261 dom::others::StaffUsed, // xml node is "instUsed"
283 dom::others::RepeatBackIndividualPositioning, // node name is "separatesRepeatBack"
284 dom::others::RepeatEndingStartIndividualPositioning, // node name is "separatesRepeatEndingLine"
285 dom::others::RepeatEndingTextIndividualPositioning, // node name is "separatesRepeatEndingText"
286 dom::others::TextRepeatIndividualPositioning, // node name is "separatesTextRepeat"
287 dom::others::ShapeData,
288 dom::others::ShapeDef,
289 dom::others::ShapeInstructionList,
294 dom::others::SmartShapeCustomLine, // node name is `ssLineStyle`
326>;
327
346 dom::details::StemAlterationsUnderBeam, // "beamStemAdjust" is the xml key
348 dom::details::BeamAlterationsDownStem, // Finale serializes the beam alts out of alpha sequence
359 dom::details::IndependentStaffDetails, // "floats" is the xml key
370 dom::details::NoteAlterations, // this is out of alpha sequence, but that's how Finale serializes it
376 dom::details::CustomDownStem, // "stemDefDown" is the xml key
377 dom::details::CustomUpStem, // "stemDefUp" is the xml key
394>;
395
403>;
404
419>;
420
421} // namespace factory
422
423namespace dom {
424
426template <typename T>
427struct is_pool_type<OptionsPool, T> : musx::factory::RegisteredOptions::template is_registered_type<T> {};
428
430template <typename T>
431struct is_pool_type<OthersPool, T> : musx::factory::RegisteredOthers::template is_registered_type<T> {};
432
434template <typename T>
435struct is_pool_type<DetailsPool, T> : musx::factory::RegisteredDetails::template is_registered_type<T> {};
436
438template <typename T>
439struct is_pool_type<EntryPool, T> : musx::factory::RegisteredEntries::template is_registered_type<T> {};
440
442template <typename T>
443struct is_pool_type<TextsPool, T> : musx::factory::RegisteredTexts::template is_registered_type<T> {};
444
445} // namespace dom
446} // namespace musx
447
448#ifdef _MSC_VER
449# pragma warning(pop)
450#endif
Base class to enforce polymorphism across all DOM classes.
Definition BaseClasses.h:83
ShareMode
Describes how this instance is shared between part and score.
Definition BaseClasses.h:91
A pool that manages collections of DetailsBase objects, organized by XML node names and Cmper values.
Definition ObjectPool.h:456
Entry pool.
Definition ObjectPool.h:538
Represents an entry containing metadata and notes.
Definition Entries.h:279
A pool that manages collections of OptionsBase objects that have no Cmper value.
Definition ObjectPool.h:358
A pool that manages collections of OthersBase objects.
Definition ObjectPool.h:400
Text pool.
Definition ObjectPool.h:573
Represents display alterations to an accidental for a specific note.
Definition Details.h:80
Assigns an articulation to an entry.
Definition Details.h:110
Contains the baseline offsets for chords.
Definition Details.h:285
Contains the baseline offsets for expressions above the staff.
Definition Details.h:300
Contains the baseline offsets for expressions below the staff.
Definition Details.h:315
Contains the baseline offsets for fretboards.
Definition Details.h:330
Contains the baseline offsets for lyrics chorus records.
Definition Details.h:345
Contains the baseline offsets for lyrics section records.
Definition Details.h:361
Contains the baseline offsets for lyrics verse records.
Definition Details.h:377
Contains the baseline offsets for chords.
Definition Details.h:199
Contains the baseline offsets for expressions above the staff.
Definition Details.h:211
Contains the baseline offsets for expressions below the staff.
Definition Details.h:223
Contains the baseline offsets for fretboards.
Definition Details.h:235
Contains the baseline offsets for lyrics chorus records.
Definition Details.h:247
Contains the baseline offsets for lyrics section records.
Definition Details.h:259
Contains the baseline offsets for lyrics verse records.
Definition Details.h:271
Beam alteration for downstem primary beams.
Definition Details.h:465
Beam alteration for upstem primary beams.
Definition Details.h:487
Beam extension for downstem beams.
Definition Details.h:549
Beam extension for upstem beams.
Definition Details.h:561
Specifies the direction for beam stubs (if they are manually overridden.)
Definition Details.h:577
Represents a bracket, used in two different contexts:
Definition Details.h:609
Represents a center shape for a others::SmartShape that spans three or more measures.
Definition SmartShape.h:603
Represents chord symbol assignment for a staff and measure.
Definition Details.h:658
Defines the octaves in which each clef should display flats in key signatures. Only linear key signat...
Definition Details.h:752
Defines the octaves in which each clef should display sharps in key signatures.
Definition Details.h:781
Represents a cross-staff assignment for the note, if any.
Definition Details.h:800
Custom stem for downstem context.
Definition Details.h:865
Custom stem for upstem context.
Definition Details.h:879
Represents display offsets and spacing adjustments for augmentation dots on a specific note.
Definition Details.h:895
Per-part overrides for entry properties such as manual position and stem direction.
Definition Details.h:925
Specifies a custom size for an entry. It scales the entire entry, including the stem and all notehead...
Definition Details.h:954
FretboardDiagram diagram for chord symbols.
Definition Details.h:985
Represents the attributes of a Finale frame holder.
Definition Details.h:1078
Represents independent time and key signature overrides for a staff.
Definition Details.h:1151
Represents a single element in a Finale accidental symbol list.
Definition Details.h:1210
Contains the syllable assignments for lyrics chorus blocks.
Definition Details.h:1283
Contains the syllable assignments for lyrics section blocks.
Definition Details.h:1301
Contains the syllable assignments for lyrics verse blocks.
Definition Details.h:1319
Specifies lyric alignment and justification for a single entry. This affects all lyric assignments on...
Definition Details.h:1338
Represents a graphic assignment anchored to a specific staff and measure.
Definition Graphics.h:335
Per-staff/per-measure overrides for the position and appearance of a measure number.
Definition Details.h:1369
Assigns an ossia passage to a specific staff/measure location.
Definition Ossia.h:179
Represents a text block assignment for a staff and measure.
Definition Details.h:1424
Represents graphical and notational alterations applied to a note.
Definition Details.h:1466
Represents a percussion note code override for a single note.
Definition Details.h:1500
Beam alteration for downstem secondary beams.
Definition Details.h:1524
Beam alteration for downstem secondary beams.
Definition Details.h:1557
Specifies which secondary beams break and restart on the associated entry.
Definition Details.h:1592
Shape Note settings for staff styles.
Definition Details.h:1715
Shape Note settings for staves.
Definition Details.h:1700
Assigns a smart shape to an entry.
Definition SmartShape.h:646
Represents the attributes of a Finale staff group that brackets staves.
Definition Details.h:1728
Represents a per-staff-size override for a specific staff in a system.
Definition Details.h:1896
Specifies horizontal and vertical adjustments for stems under beam.
Definition Details.h:1956
Specifies horizontal and vertical stem adjustments for upstem and downstem contexts.
Definition Details.h:1930
Specifies the TAB string a note appears on. Finale automatically figures out the fret number from the...
Definition Details.h:1973
Alterations for tie ends.
Definition Details.h:2093
Alterations for tie starts. (Tie starts are normal ties.)
Definition Details.h:2110
Options controlling the appearance of tuplets.
Definition Details.h:2127
Options controlling the appearance and positioning of accidentals.
Definition Options.h:57
Options controlling the appearance of alternate notation.
Definition Options.h:80
Options controlling the appearance of augmentation dots.
Definition Options.h:104
Options controlling the appearance of barlines.
Definition Options.h:137
Options controlling the appearance of beams.
Definition Options.h:168
Options controlling chord symbol and fretboard rendering.
Definition Options.h:209
Options for configuring clefs in a musical context.
Definition Options.h:262
Options controlling the appearance and adjustments of flags.
Definition Options.h:357
An unordered map of default font settings for the document.
Definition Options.h:395
Options controlling the appearance and behavior of grace notes.
Definition Options.h:500
Options controlling the appearance and behavior of key signatures.
Definition Options.h:523
Options controlling the appearance of line and curve elements.
Definition Options.h:552
Options controlling lyric rendering in the musx file.
Definition Options.h:582
Options controlling miscellaneous settings.
Definition Options.h:705
Options controlling the appearance and behavior of multimeasure rests.
Definition Options.h:733
Options controlling music spacing.
Definition Options.h:761
Options specifying the charactes for musical symbols.
Definition Options.h:838
Options controlling note/rest display and positioning.
Definition Options.h:920
Options for page formatting in the document.
Definition Options.h:983
Options controlling the appearance of piano braces and brackets.
Definition Options.h:1092
Options controlling the appearance of repeats.
Definition Options.h:1121
Options controlling the appearance of smart shapes in the musx file.
Definition Options.h:1182
Options controlling the appearance and layout of staves.
Definition Options.h:1384
Options controlling the appearance of stems.
Definition Options.h:1411
Options controlling text rendering in the musx file. Many of these options are default values that ar...
Definition Options.h:1482
Options controlling the appearance of ties.
Definition Options.h:1582
Options controlling the appearance and behavior of time signatures.
Definition Options.h:1742
Options controlling the appearance of tuplets.
Definition Options.h:1773
Lists the aleration values of each nth flat in a custom key signature. Normally these values are all ...
Definition Others.h:97
Lists the aleration values of each nth sharp in a custom key signature. Normally these values are all...
Definition Others.h:130
Lists the order of flats by pitch class index (0..6 = C..B) in a custom key signature....
Definition Others.h:156
Lists the order of sharps by pitch class index (0..6 = C..B) in a custom key signature....
Definition Others.h:187
Stores the properties and behaviors of articulation definitions.
Definition Others.h:207
A single beat chart element from Finale's music spacing system.
Definition Others.h:343
Represents a single element in a chord suffix (e.g., a symbol like "1" or "+").
Definition Others.h:405
Represents a list of repeat ending numbers for a RepeatEndingStart instance.
Definition Others.h:452
Represents an element in multimeasure clef list with its positioning and percentage values.
Definition Others.h:472
Identifies the percussion map ("drum library") for a staff style with percussion notation.
Definition Others.h:523
Identifies the percussion map ("drum library") for a staff with percussion notation.
Definition Others.h:503
Opaque storage for a platform-specific alias handle associated with a graphic.
Definition Graphics.h:41
Describes the locator flavor Finale used for the associated file/graphic.
Definition Graphics.h:69
Stores a human-readable path/leaf name recorded by Finale.
Definition Graphics.h:105
Opaque storage for a platform-specific URL/bookmark blob (e.g., macOS CFURL bookmark).
Definition Graphics.h:124
The name and font characteristics of fonts contained.
Definition Others.h:539
Represents the attributes of a TGF entry frame.
Definition Others.h:609
Describes a fretted instrument (strings, frets, name, clef). It is used for both TAB notation and Fre...
Definition Others.h:750
A named group of fretboard diagrams associated with a specific fretboard instrument.
Definition Others.h:662
Fretboard diagram style: shapes, spacing, fonts, and offsets.
Definition Others.h:692
Represents the attributes associated with a Finale key signature.
Definition Others.h:862
The key format for a custom key signature.
Definition Others.h:805
An array of step elements from which one can create a key map.
Definition Others.h:824
Represents the attributes of a Finale "layer".
Definition Others.h:894
Represents the name associated with a MarkingCategory.
Definition Others.h:1099
Represents a category of markings used.
Definition Others.h:1017
Assigns a TextExpressionDef or ShapeExpressionDef to a measure.
Definition Others.h:1284
Represents the Measure Number Region with detailed font and enclosure settings for score and part dat...
Definition Others.h:1404
Represents the attributes of a measure.
Definition Others.h:1113
Represents a group ID for a multi-staff setup.
Definition Others.h:1589
Represents a group of instruments spanning multiple staves.
Definition Others.h:1607
Represents the attributes of a multimeasure rest in the page layout.
Definition Others.h:1543
Overrides abbreviated name positioning for Staff.
Definition Others.h:1660
Overrides full name positioning for Staff.
Definition Others.h:1688
Overrides abbreviated name positioning for StaffStyle.
Definition Others.h:1674
Overrides full name positioning for StaffStyle.
Definition Others.h:1702
Stores additional positioning offsets for ossia passages.
Definition Ossia.h:46
Header properties for an ossia passage (clef, key, time, grouping).
Definition Ossia.h:71
Stores display and source options for an ossia passage.
Definition Ossia.h:115
Represents a page graphic assignment with positioning and page-range properties.
Definition Graphics.h:160
Represents the assignment of an ossia passage to a specific page.
Definition Ossia.h:149
Represents a page text assignment with positioning and page range properties.
Definition Others.h:1772
Represents the attributes of a page in the page layout.
Definition Others.h:1715
Represents the attributes of a Finale "partDef".
Definition Others.h:1885
Represents global values that can vary by part.
Definition Others.h:1950
Defines voicing options for linked parts, either by selection rules or by assigning a layer.
Definition Others.h:1999
Represents percussion notehead and staff position info for a given percussion note type.
Definition Others.h:2052
Per-instance positioning overrides for RepeatBack.
Definition Others.h:2323
Represents a repeat-backward marker with positioning and behavior properties.
Definition Others.h:2126
Per-instance positioning overrides for the line positioning of RepeatEndingStart.
Definition Others.h:2339
Represents a repeat ending start marker in the document.
Definition Others.h:2172
Per-instance positioning overrides for text positioning of RepeatEndingStart.
Definition Others.h:2355
Represents the text associated with a RepeatEndingStart.
Definition Others.h:2249
Represents a list of repeat ending numbers for a RepeatEndingStart instance.
Definition Others.h:2270
Stores the properties and behaviors of shape expressions.
Definition Others.h:2383
Represents a graphic assignment anchored to a specific staff and measure.
Definition Graphics.h:282
Represents a Finale smart shape custom line style.
Definition SmartShape.h:405
Assigns a smart shape or center shape to a measure.
Definition SmartShape.h:567
Represents a Finale smart shape.
Definition SmartShape.h:181
Defines the split point(s) where a measure may be divided between two systems. A measure can only spl...
Definition Others.h:2444
This class specified the name of a staff list used by @ ref MarkingCategory.
Definition Others.h:2483
This class is used by MarkingCategory to define the staves for parts in a staff list.
Definition Others.h:2497
This class is used by MarkingCategory to define the staves for parts in a staff list.
Definition Others.h:2513
This class specified the name of a staff list used by RepeatEndingStart, RepeatBack,...
Definition Others.h:2529
This class is used by repeat classes to define the forced staves for parts in a staff list....
Definition Others.h:2560
This class is used by repeat classes to define the staves for parts in a staff list.
Definition Others.h:2543
This class is used by repeat classes to define the forced staves for the score in a staff list....
Definition Others.h:2593
This class is used by repeat classes to define the staves for the score in a staff list.
Definition Others.h:2576
Represents an assignment.
Definition Staff.h:632
Represents a Finale staff style.
Definition Staff.h:496
Represents the attributes of a staff system in the page layout.
Definition Others.h:2635
An array of StaffUsed defines a set of staves in a staff system or in Scroll View.
Definition Others.h:2715
Represents the definition of a Finale staff.
Definition Staff.h:52
Locks a span of one or more measures so that they always appear in a StaffSystem together.
Definition Others.h:2748
A single tempo change value entered with Finale's Tempo tool.
Definition Others.h:2779
Represents the attributes of a Finale "textBlock".
Definition Others.h:2815
Stores the properties and behaviors of text expressions.
Definition Others.h:2876
The enclosure for a text expression (if it exists)
Definition Others.h:2934
Represents a text repeat assignment with positioning and behavior properties.
Definition Others.h:2951
Defines text repeat elements with font styling and justification.
Definition Others.h:3002
The enclosure for a text expression (if it exists)
Definition Others.h:3044
Per-instance positioning overrides for TextRepeatDef.
Definition Others.h:2370
Represents the text associated with a TextRepeatDef.
Definition Others.h:3061
Represents the lower composite time signature array.
Definition Others.h:3084
Represents the upper composite time signature structure.
Definition Others.h:3119
Maps the number of flats to a tonal center for a linear custom key. If there are zero flats or sharps...
Definition Others.h:3163
Maps number of sharps (0..7) to a tonal center for a linear custom key. Also maps 0 sharps or flats....
Definition Others.h:3185
Contains block text (Finale Text Tool, both page- and measure-attached)
Definition Texts.h:194
Contains bookmark description text.
Definition Texts.h:241
Contains text blocks associated with text expressions.
Definition Texts.h:224
Contains File Info text (from Finale's Score Manager)
Definition Texts.h:51
Contains chorus text for lyrics.
Definition Texts.h:164
Contains section text for lyrics.
Definition Texts.h:179
Contains verse text for lyrics.
Definition Texts.h:149
Contains text blocks associated with custom line smart shapes.
Definition Texts.h:209
A utility class for managing deferred relationships between elements during document construction.
Definition FactoryBase.h:72
A registry of types for mapping XML node names to types.
Definition TypeRegistry.h:67
static std::optional< CreatedInstanceInfo > createInstance(const PoolPtr &pool, const XmlElementPtr &node, ElementLinker &elementLinker, const DocumentPtr &document, Args &&... args)
Creates an instance of the registered type corresponding to the provided node name.
Definition TypeRegistry.h:150
static constexpr bool is_registered_type_v
Shorthand to get the value of is_registered_type.
Definition TypeRegistry.h:121
constexpr Cmper SCORE_PARTID
The part id of the score.
Definition Fundamentals.h:79
uint16_t Cmper
Enigma "comperator" key type.
Definition Fundamentals.h:55
std::shared_ptr< Document > DocumentPtr
Shared Document pointer.
Definition BaseClasses.h:55
std::shared_ptr< IXmlElement > XmlElementPtr
shared pointer to IXmlElement
Definition XmlInterface.h:121
object model for musx file (enigmaxml)
Definition BaseClasses.h:36
Type trait to determine if a class in a given pool.
Definition ObjectPool.h:60
Information about a created instance returned by createInstance.
Definition TypeRegistry.h:126
std::shared_ptr< Base > instance
The newly created instance.
Definition TypeRegistry.h:131
std::string_view xmlNodeName
The static std::string_view containing the instance's node name.
Definition TypeRegistry.h:132
CreatedInstanceInfo(std::shared_ptr< Base > inst, std::string_view nodeName)
Constructor.
Definition TypeRegistry.h:128
Determine at compile-time if type T is a class in this registry.
Definition TypeRegistry.h:116