有关模板非类型参数的显示特化问题
// 程序要求定义一个模板sum,查询数组中某个值出现的次数,写个程序
// 调用它,并按顺序向其传递double、int和字符串数组,前两个用通用
// 模板,字符串数组调用显示特化模板
#include <iostream>
using namespace std;
typedef const char *PCC;
template < typename T1, typename T2, int size >
T1 sum( T2 (&tarray)[size], T2 input );
// 当我用下面的方法定义显示特化模板时编译出错
// template<> int sum<int>( PCC (&tarray)[size], PCC s2 );
// 提示,必需指定size的值
// 该模板函数的显示特化必需像下面一样将数组的长度固定下来吗?
// 为什么编译器不能像通用模板一样算出size的值???
template<> int sum<int>( PCC (&tarray)[5], PCC s2 ); // 这样正确
int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
double b[5] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
const char *c[5] = { "work", "hard", "work", "smart", "!" };
// 调用通用模板
cout << sum<int>( a, 2 ) << endl;
cout << sum<int>( b, 1.1) << endl;
// 调用显示特化模板
cout << sum<int>( c, c[1] ) << endl;
system( "PAUSE" );
return 0;
}
template < typename T1, typename T2, int size >
T1 sum( T2 (&tarray)[size], T2 input )
{
......
}
template<> int sum<int>( PCC (&tarray)[5], PCC s2 )
{
.......
}
程序的完整代码在下面
另外还有一个小问题,我觉得显示特化好像没有什么用,因为完全可以
定义一个普通函数来解决特定的问题,你们认为呢?