问题 功能上的模板模板参数


这是C ++模板中的有效模板构造吗?

template < template <typename T2> class T> 
void foo() {

}

10204
2017-10-16 06:24


起源

@ChrisLutz,我想 T2 是可选的。 - iammilind
@ChrisLutz:我想,不是真的。 ideone.com/8jlI5 - Nawaz
@Nawaz - 我记得在某处读过。我今天似乎只是错了。我的错。 - Chris Lutz


答案:


是。这是有效的。

您可以使用任何类模板调用此函数 究竟 一个模板参数。例如,

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!
}

演示: http://ideone.com/8jlI5


13
2017-10-16 06:32



喜欢 T2 在这种情况下,它总是可选的吗?我也无法在类模板上使用它。 ideone.com/LEt6N - user103214
@ user974191:是的。它永远不需要。你不能在模板定义中使用它! - Nawaz