
2009/2/19 Neal Becker <ndbecker2@gmail.com>
Say I have:
template<typename in_t> void F (in_t & in) ...
main() { F<std::vector<int> > (...)
Suppose in_t is a templated container, such as std::vector<int>. Is there a way within the function 'F' to get the generic container type, 'std::vector' when F is instantiated with a specific e.g., std::vector<int>?
Maybe this will help you. template <class Base, class Arg> struct rebind; template <template <class> class Base, class T, class Arg> struct rebind<Base<T>, Arg> { typedef Base<Arg> type; }; template <class In> void foo() { // d is of type container<double>. typename rebind<In, double>::type d; } template <class T> struct container {}; int main() { foo<container<int> >(); } With vector and other STL containers it's a bit harder, because they can have more than one template parameter. Roman Perepelitsa.