这是C ++模板中的有效模板构造吗?
template < template <typename T2> class T>
void foo() {
}
答案 0 :(得分:13)
是。这是有效的。
您可以使用任何类模板调用此函数,该模板将 完全 一个模板参数。例如,
template<typename T>
struct A
{
//...
};
foo< A >(); //ok
请注意,您不必为A
类模板提供模板参数,这意味着,以下操作会导致编译错误:
foo< A<int> >(); //error
此外,在您的代码中T2
是可选的,事实上,您无法在函数中使用它,因此最好将其删除以使定义更简单:
template < template <typename> class T>
void foo() {
T<int> x; //this is how T can be instantiated; provide template argument!
}