Re: Forward template declaration problem
Jure Erznoznik wrote:
I'd like to hide implementation details from declaration because
dragging all the support types from .cpp to .h would be unnecessary,
redundant and just plain ugly.
So I try to forward-declare the classes used in actual
implementation. This works well for ordinary classes, but not so
well for templates (std::multimap in this case).
I know the typedef from the following sample redeclares my desired
type, but I included the code because I don't know any better. I
also included a sample for MyClass class which compiles fine - for
reference of what I want to do.
So how can I make the below code work without:
1. Dragging all the necessary types into .h
2. Declaring jobList member as void * and then typecasting all over
the place
3. Using #define to mask the typecasting from #2
Please forgive the fact that I'm still learning C++.
Thanks,
Jure
//sample.h here
class JobListMap;
class MyClass;
class RefClock
{
public:
RefClock();
JobListMap *jobList;
MyClass *test;
};
//sample.cpp from now on
#include "sample.h"
#include <map>
struct MyType1 {
...
};
struct MyType2 {
...
};
class MyClass {
};
typedef std::multimap<MyType1, MyType2> JobListMap;
No way! :-)
Earlier you said that JobListMap is a class, now you say it's a
typedef. Can't do that!
A possible, but ugly, way of actually making it a class is
class JobListMap : public std::multimap<MyType1, MyType2>
{
// whatever constructors you need here
};
RefClock::RefClock()
{
jobList = new JobListMap();
test = new MyClass();
}
Bo Persson