template < typename T >
class CLASS_TEMPLATE { } ;
template < template < typename T > class CLASS >
void funcI ( ) { }
template void funcI < CLASS_TEMPLATE > () ;
как компилятор создает экземпляр функции, если у него нет подсказки о аргументах шаблона CLASS_TEMPLATE.?
================================================== ======================
мои предположения о шаблоне шаблона были неверными.
формальный параметр шаблона из funcI
это шаблон с одним параметром шаблона.
template < template < typename... > class CONTAINER >
void funcII ( )
{
CONTAINER< int > container0 ;
CONTAINER< float > container1 ;
/* ... */
}
template void funcII < std::vector > () ;
будет создавать funcII
шаблон как { std::vector< int > container0 ; std::vector< float > container1 ; /* ... */ }
;
Явным образом
template void func < CLASS_TEMPLATE > () ;
Вы эффективно делаете это:
template <>
void func<CLASS_TEMPLATE>() { }
Там нет необходимости иметь параметры шаблона для CLASS_TEMPLATE
сделать это.
Других решений пока нет …