Template template parameter partial specialization c++ -
consider code:
template<template<typename,typename> class container> class { template<class u, class allocator> void foo(container<u, allocator>*, u); };
now want specialize a
in case container map value , comparator known, , create definition of foo
in case (no specialization of foo
). tried this:
template<typename v, typename comp> template<class u, class allocator> void a<std::map<typename, v, comp, typename>>::foo(map<u, v, comp, allocator>*, u ) {...}
but compiling error:c3200: 'std::map<int,v,comp,int>' : invalid template argument template parameter 'container', expected class parameter.
i have looked online , found similar issues, couldn't find way specify partial template parameter list of template template. there way it?
edit: problem when giving template class partial specialization make behave template remaining parameters. here it's attempt think of map<*,known1,known2,*>
template of 2 arguments (which can realy used template template parameter of a
) .
edit 2: compiler have use gcc 4.1.2 has no support template aliasing, which, understood, solution.
the problem a
takes template template parameter takes 2 types:
template<template<typename,typename> container> class {
but std::map
doesn't take 2 types. takes four:
template< class key, class t, class compare = std::less<key>, class allocator = std::allocator<std::pair<const key, t> > > class map;
so that's 1 problem. have generalize template following (also note missing class
keyword):
template <template <typename...> class container> class { ... };
but that, @ explicitly specialize member function, can't partially specialize it:
template <> template <> void a<std::map>::foo<>(std::map<u, v>*, u) { ... }
Comments
Post a Comment