Streamable template classes differ from ordinary non-templatized classes in their use of the streamable definitions and declarations macros. The macros used for ordinary classes will not expand correctly within template classes. They are replaced by a combination of inline code and an alternate declarations macro, as shown in the following example:
template <class AType> class IMyClass : public IMSTREAMABLE { static IStreamableHelperFor< IMyClass<AType> > fgStreamableHelper; StreamableTemplateDeclarationsMacro; private: // ... };
Note: Each instantiation of a template class is really a new class type. When you instantiate a streamable template class, you must define and initialize its IStreamableHelperFor variable:
The following shows an instantiation of IMyClass over int in the program's implementation file:
#include <myclass.hpp> extern IStreamModule gMyStreamModule; IMyClass<int> foo; IStreamableHelperFor< IMyClass<int> > IMyClass<int>::fgStreamableHelper( gMyStreamModule, 'IMyClass<int>');
The following shows another instantiation of the IMyClass, this time over IString:
#include <myclass.hpp> extern IStreamModule gMyStreamModule; IMyClass<IString> bar; IStreamableHelperFor<IMyClass<IString> > IMyClass<int>::fgStreamableHelper( gMyStreamModule, 'IMyClass<IString>');
Introduction
to the Streaming Classes
Data Streams
Adding Streaming Support
to Structs and Simple Classes
Creating a Streamable
Class
Instantiating a
Stream Module
Enabling
Release-to-Release Data Compatibility
Streaming Base Classes
Instantiating a Data
Stream