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:16:29
周星星
您觉得版本号的提高就是“时代的发展”?
“VC7.1完善了很多C++语法的支持。” --- 我不知道您想说什么,如果您觉得因为VC7比VC6对C++语法支持更好就应该使用它的话,我们是不是忘了还有对C++支持最好的GCC?
另外您从何处觉得我“拒绝新事物”?只是问问而已(好奇心),我既不拒绝新事物,也不不拒绝新事物,我从来不因为事物的新或旧而接受或拒绝。我只是不喜欢VC++.net的界面设计,一个非专业人员的设计,当然你可以有不同的观点。
对于您的第二段,我想替那位仁兄回答你:
“技术本来就是讨论的” --- 是,但要讨论“技术”,而不是无知的谩骂。我的Blog建在VCKBASE上,VCKBASE是我见过文明而自由(文明我见多了,只要斑竹不停的删贴子就行;自由我见多了,无非就是任意谩骂)的唯一地方,估计那位仁兄就没有这么好运,整天面对无聊的谩骂和无知的驳斥,当然很累,我深有同感,很多贴子我不想回,包括您这一篇,其实我犹豫了很久。
“怎么可能保证自己的观点都是正确的”