struct A
{
template<int>
void foo()
{}
};
int main()
{
A a;
a.foo<0>(); // ok
a.template foo<0>(); // also ok
}
明显, a.foo<0>();
比...更简洁,直观和富有表现力 a.template foo<0>();
。
为什么C ++允许 a.template foo<0>();
即使 a.foo<0>();
足够?
有时,在模板中,您需要编写 a.template foo<0>()
代替 a.foo<0>()
。
@melpomene在评论中给出了这个很好的例子:
template<typename T>
void do_stuff() {
T a;
a.template foo<0>();
}
do_stuff<A>();
- 在C ++ 03中,
a.template foo<0>()
不应该在你目前的情况下使用。
g++
编译代码时会输出以下警告:
警告:模板外的'template'关键字[-Wc ++ 11-extensions]
- 在C ++ 11中,通过允许使用的语法简化了语法
a.template foo<0>()
语法到处都是