template <class T> 与 template<typename T>在用法上有什么区别吗?
template <class T> 和 template<typename T>都可以用来定义模板函数和模板类,但是他们二者到底有什么区别呢?
[解决办法]
typename关键字是后来添加进来的,用class有点和类混淆,typename的另一个作用是定义一个变量
[解决办法]
[解决办法]
- C/C++ code
//总结一点点模板中比较怪的语法template<typename X>struct A;template<typename T, typename T1>void fuck1(A<T1>);template<typename T, typename T1>void fuck2(A<T1>);template<typename X>struct A{typedef int* intptr;//类模板的函数模板template<typename Y> void fuck();//绑定的模板友元,注意这里的第一个参数绑定到了intfriend void fuck1 <int, X> (A);//非绑定的模板友元template<typename T, typename T1> friend void fuck2(A);private: int v;};//模板的模板参数template<template <typename> class T>//class不能换class B{};//示例typename和template的用法template<typename T>void foo(T t){ typename T::intptr x;//typename不能省 t.template fuck<int>();//template不能省}//类模板的函数模板定义语法template<typename X>template<typename Y>void A<X>::fuck(){}//定义这两个函数模板template<typename T, typename T1>void fuck1(A<T1> a){a.v = 1;}template<typename T, typename T1>void fuck2(A<T1> a){a.v = 1;}//显示实例化template class A<int>;//template void fuck1<float>(A<float>);出错template void fuck1<int>(A<int>);template void fuck2<A<int>, A<double> >(A<A<double> >);int main(){ A<int> a; B<A> b; fuck1<int>(a); //fuck1<float>(a);出错 fuck2<int>(a); fuck2<double>(a); return 0;}
[解决办法]
http://hi.baidu.com/feixue/blog/item/d9f79925d8a45b6c34a80fce.html
关于模板中不常见的语法,也就是对8楼代码的补充。