2012年(158)
分类: C/C++
2012-11-19 11:02:29
有关模板的语法很多很杂,无法一一列举,在此仅测试几个简单常用的语法。
以下有关模板的语法分别使用 gcc3.4.2、VC++6.0 和 Intel
C++8.0 进行测试,GCC342和ICC都能完全通过测试,VC++6.0有部分通不过测试。
1. 模板类静态成员
template
static int
_data;
};
template<> int testClass
template<> int testClass
int main( void )
{
cout << boolalpha << (1==testClass
cout << boolalpha <<
(2==testClass
}
2.
模板类偏特化
template
testClass() { cout << "I, O" << endl; }
};
template
testClass() { cout
<< "T*, T*" << endl; }
};
template
testClass() { cout << "const T*,
T*" << endl; }
};
int main( void ) {
testClass
testClass
testClass
}
[注]: VC++6 编译不通过
3. function template partial
order
template
void swap(
testClass
};
template
x.swap( y );
}
int main( void )
{
testClass
testClass
swap( obj1, obj2 );
}
[注]: VC++6
编译不通过
4. 类成员函数模板
struct testClass {
template
cout << t <<
endl;
}
template
return
T();
}
};
int main( void ) {
testClass obj;
obj.mfun(
1 );
int i = obj;
cout << i << endl;
}
[注]:
对于第二个成员函数模板,VC++6 运行异常
5. 缺省模板参数推导
template
T a;
};
template
I b;
O c;
};
6.
非类型模板参数
template
T
_t;
testClass() : _t(n) {
}
};
int main( void )
{
testClass
testClass
}
7. 空模板参数
template
template
return
false;
};
template
friend bool
operator== <>( const testClass&, const testClass& );
};
[注]:
VC++6 编译不通过
8. 模板特化
template
};
template <> struct testClass
};
9.
template class
X>
struct Widget{
};
[注]: VC++6
编译不通过
10. [hpho]提供的一个事例
struct Widget1
{
template
T
foo(){}
};
templateclass X>
struct
Widget2{
};
[注]: VC++6 编译不通过
11.
数组作模板实参
template
{
cout << typeid(T).name() << " (&bar)[" << N
<< "]" << endl;
};
int main()
{
int a[10];
foo( a );
return 0;
}
[注]: VC++6
编译不通过
12. 模板作为模板的参数
template< class T, template
void Test( T, Y
{
}
[注]: VC++6 编译不通过
13.
template
{
foo() {}
foo( const foo& ) {}
template& ) {}
};
int
main()
{
foo
foo
foo
}
[注]:
网友评论2012-11-19 11:13:53
刘未鹏
to 星星:
误会了,我说的就是VC 2005 Express(8.0),不是Widbey,Widbey还没出呢:)
另外,我安装了VC 2005 Express好像只耗了200M嘛:)怎么会有3G呢?你只装VC 2005 Express就是了嘛。另外,如你所愿,VC 2005 Express不带MFC,不带ATL,甚至连Platform SDK都不带,再加上它对C++标准的极好支持,实在是得心应手的好工具哦。
我并不是推荐你用它来做公司开发,而是私下用来研习C++而已:)
此外,可以考虑使用VC 2005 Express+ STLport 的搭配,强强联合:)说实话,P.J.Plauger写的STL代码实在看起来头疼:)
网友评论2012-11-19 11:13:25
周星星
谢谢,但我没钱买vc2005(你不是不让用盗版嘛,而公司.net部门用VS2002,它们没法换新版本了,因为它们的代码以及第三方的控件在VS2003中跑不起来,甚至win2ksp4都不能打 ^_^看.net的兼容性有多好?!),何况它还只是beta版(如果出了问题我负担不起呀。)
更主要的是,我现在(将来更是)不用MFC,不用ATL,只用纯C/C++语法和C/C++标准库(稳定无BUG是主要目的,其次是要保证能移植到Linux上),所以安装庞大的VC2005.net有点浪费机器资源。
不过它能够现场解析宏确实是一个大亮点,如果有机器空余的话,安装一个瞧瞧。