diff --git a/src/ifcgeom/IfcGeomFunctions.cpp b/src/ifcgeom/IfcGeomFunctions.cpp index e9f47425d4..82f92fc0e9 100644 --- a/src/ifcgeom/IfcGeomFunctions.cpp +++ b/src/ifcgeom/IfcGeomFunctions.cpp @@ -150,10 +150,8 @@ #define MAKE_INIT_FN_(a, b) MAKE_INIT_FN__(a, b) #define MAKE_INIT_FN(t) MAKE_INIT_FN_(t, IfcSchema) -void MAKE_INIT_FN(KernelImplementation_)(IfcGeom::impl::KernelFactoryImplementation* mapping) { - static const std::string schema_name = STRINGIFY(IfcSchema); - - struct { +namespace { + struct factory_t { IfcGeom::Kernel* operator()(IfcParse::IfcFile* file) const { IfcGeom::MAKE_TYPE_NAME(Kernel)* k = new IfcGeom::MAKE_TYPE_NAME(Kernel); if (file) { @@ -201,11 +199,14 @@ void MAKE_INIT_FN(KernelImplementation_)(IfcGeom::impl::KernelFactoryImplementat } return k; } - } factory; - - mapping->bind(schema_name, factory); + }; } +void MAKE_INIT_FN(KernelImplementation_)(IfcGeom::impl::KernelFactoryImplementation* mapping) { + static const std::string schema_name = STRINGIFY(IfcSchema); + factory_t factory; + mapping->bind(schema_name, factory); +} #define Kernel MAKE_TYPE_NAME(Kernel) diff --git a/src/ifcgeom/IfcGeomIteratorImplementation.cpp b/src/ifcgeom/IfcGeomIteratorImplementation.cpp index d8cca8dd5f..8313f5ce43 100644 --- a/src/ifcgeom/IfcGeomIteratorImplementation.cpp +++ b/src/ifcgeom/IfcGeomIteratorImplementation.cpp @@ -10,16 +10,19 @@ namespace IfcGeom { #define MAKE_INIT_FN_(a, b) MAKE_INIT_FN__(a, b) #define MAKE_INIT_FN(t) MAKE_INIT_FN_(t, IfcSchema) -template -void MAKE_INIT_FN(IteratorImplementation_)(IteratorFactoryImplementation

* mapping) { - static const std::string schema_name = STRINGIFY(IfcSchema); - - struct { +namespace { + template + struct factory_t { IfcGeom::IteratorImplementation

* operator()(const IfcGeom::IteratorSettings& settings, IfcParse::IfcFile* file) const { return new IfcGeom::MAKE_TYPE_NAME(IteratorImplementation_)

(settings, file); } - } factory; + }; +} +template +void MAKE_INIT_FN(IteratorImplementation_)(IteratorFactoryImplementation

* mapping) { + static const std::string schema_name = STRINGIFY(IfcSchema); + factory_t

factory; mapping->bind(schema_name, factory); }