模板模板函数实例化
template template function instantiation
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
的模板参数来做到这一点。
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
的模板参数来做到这一点。