Re: template template parameter compilation errors!!!
aaragon wrote:
...
What about default parameters? I could use for that class template
either the std::map, or a hash_map. They both have different number of
parameters, so why should I provide the total number of parameters?
Well, the thing is that in tis case you _can't_ use "either the std::map, or a
hash_map" if these templates accept different number of template arguments.
Just like default arguments in a function declaration don't change the fact that
a two-parameter function is still a two-parameter function (according to its type)
void foo(int, int = 2);
void (*p1)(int) = &foo; // ERROR
void (*p2)(int, int) = &foo; // OK
default template arguments in template declaration don't change the fact that a
4-parameter template is a 4-parameter template and it will not pass as an
argument for a 2-parameter template template parameter.
If you want to stick with 2-parameter template template parameter and still be
able to use 'std::map' or 'hash_map' as arguments, you'll have to use an
appropriate template trick, of which there are many.
For example, consider how I do it in the following code sample
template <typename S, typename D> struct std_map_adaptor {
typedef std::map<S, D> type;
};
template <typename S, typename D> struct hash_map_adaptor {
typedef hash_map<S, D> type;
};
template < template <class,class> class MapPolicy = std_map_adaptor>
class TriangleGaussMap
{
public:
void foo()
{
typename MapPolicy<int, double>::type map;
// Note the use of nested typename 'type'
map[0] = 5;
map[1] = 3.5;
map[2] = 8.1;
}
};
int main()
{
TriangleGaussMap<> map1;
map1.foo();
TriangleGaussMap<hash_map_adaptor> map2;
map2.foo();
}
--
Best regards,
Andrey Tarasevich