Forward declaring standard library classes
Chris Jefferson
caj@cs.york.ac.uk
Thu Nov 18 22:09:00 GMT 2004
With regards earlier emails, I am now attempting to optimise sort to be
more efficent when classes with an efficent swap are in use. Early
results are impressive :)
However, my problem now is that I need to have some class which I
specialise to decide when I should use the more efficent versions. My
early version looks something like:
template<typename _Tp>
struct _UseSwap
{ enum{_M_type = 0};};
template<typename _Tp>
struct _UseSwap<std::vector<_Tp> >
{enum{_M_type = 1};};
...etc.
However, I don't want to pull in <vector>, <list>, <deque>, <map>,
etc... so I forward declare these classes. However, the following
doesn't compile:
***
#include<functional>
namespace std
{
template<typename _Tp>
class allocator;
template<class _Key, class _Compare = less<_Key>,
class _Alloc = allocator<_Key> >
class set;
}
#include<set>
***
complaining that I have redefined the default parameter to _Compare. It
(unsuprisingly) doesn't work with my original version, where I also
forward declare less.
At the moment I'm getting around this by simply including every standard
container in stl_algo.h, but obviously this cannot continue. Any
suggestions?
Sorry for possibly very stupid C++ programming question...
Chris
More information about the Libstdc++
mailing list