c++中的typename在一般情况下用于模板声明时可以用class来代替,但是这显然不是typename的真正用途所在
它的正在用途是取消二义性,比如我们用如下函数
template<typename K> void dummy(K a) { K::iteator b; }
这个代码在编译器看来是有二义性的,因为事实上如下两种K都可以适用于上面的函数
和
这样编译器就不知道你要干什么了,这个时候你的代码就必须写成如下这样:
这才表示一个变量声明,而不是一个变量
c++中的typename在一般情况下用于模板声明时可以用class来代替,但是这显然不是typename的真正用途所在
它的正在用途是取消二义性,比如我们用如下函数
template<typename K> void dummy(K a) { K::iteator b; }
这个代码在编译器看来是有二义性的,因为事实上如下两种K都可以适用于上面的函数
和
这样编译器就不知道你要干什么了,这个时候你的代码就必须写成如下这样:
这才表示一个变量声明,而不是一个变量