template<typename T>
class CSIRO::Rendering::ShaderImplementationFactoryTraits< T >
In order to ensure that shaderimpl factories used across plugins are portable (ie will work on all platforms), there are cases where the code must prevent the compiler from having the chance to inline certain functions. In particular, the TypedShaderImplementationFactory template implements some memory allocation and deallocation, and this must not be allowed to get inlined or else memory could be allocated in one module and deallocated in another, and that is not portable. Therefore, the ShaderImplementationFactoryTraits class provides an interface to the TypedShaderImplementationFactory functions but in a way that hides its implementation. The factory is ultimately instantiated by the DEFINE_SHADER_IMPL_FACTORY macro and the client code instantiates the ShaderImplementationFactoryTraits class whenever it is needed. The macro defines the functions that are only declared in the ShaderImplementationFactoryTraits class, and by only using the macro in an implementation file and never a header, the two classes are effectively decoupled and client code never sees the implementation of TypedShaderImplementationFactory.