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:15:38
疯子阿虹
好长的一篇文章啊,我看了一点,但是我想说两句。
VC7.1完善了很多C++语法的支持。
不过搂主说:
# to Mick: 2005-01-27 03:14 周星星
谢谢您的评论,但我和netsin的观点一致:没人用VC7.1和VC8.0。
VC++6.0的唯一优点是其IDE做得不错,界面科学,速度也很快,而后来的VC++已经没有任何优点了。
这个简直是大错特错,你这不是在抗拒时代的发展吗?
拒绝新事物是人类的本性。
可是必须要适应新事物才能跟上脚步。
前两年,我刚听到python,嗤之以鼻,可是近来我的想法却大有改变。看着那么多人大肆谈论python。我才发现我已经落伍了。
网友评论2012-11-19 11:14:51
abc
比如正则表达式的解析,Boost::regex,greta,PCRE这三个库应该是C++程序员比较主要的选择。
Boost的写法用了一些模板的高级特性,而greta则是使用了模板的基本特性,而pcre跟本就是一些c function.
boost::regex和greta,PCRE比,在效率,编译后代码的大小方面根本没有什么优势,甚至可以说反而有点劣势。虽然写的很漂亮,功能也很强大,但是在实际应用中,大多数程序员和组织反而愿意选用后两种。
你Boost::regex又没有给我带来象效率,更小的代码这些对产品品质真正有帮助的东西,就是写的很漂亮,写的很cool有什么用呢?反而到是模板高级特性大量的使用,造成了对大多数程序员来说维护,理解和使用的不方便和困难。
上面就是一个例子,不知道楼主工作了几年,在没在一些行业领导的公司工作过,感觉楼主已经走入了一个有点偏执的误区了。