delctype
поддержка в C ++ 0x делает это довольно тривиальным для реализации:
template<template <typename> class Parent, typename Param1>
Param1 get_type(Parent<Param1> const &input) { return Param1(); }
SomeTpl<int> some_obj;
delctype(get_type(some_obj)) x;
(хотя вам нужно отдельное определение get_type для шаблонов с параметрами 2, 3, 4 и т. Д.)
К сожалению, я не думаю, что есть способ сделать это без decltype, потому что для этого требуется автоматическое удержание типа, обеспечиваемое шаблонами функций (которое недоступно для шаблонов классов), и поэтому нет способа сделать typedef таким образом.
Я не знаю, если в boost уже есть что-то подобное, но если они это сделают, все равно потребуется ваш компилятор для поддержки decltype
, но поскольку decltype настолько нов, в boost не так уж много вещей который использует это еще (хотя есть некоторые).