有函数模板的,一定是类模板。
通过给函数模板传值就可以确定类型,为什么还要通过类确定呢。然后就试了试:
#includeusing std::cout;using std::endl;template class lei{ int a; void output(const T &b);};template void lei::output(const T &b){ cout << b << endl;}int main(){ lei A; A.output(1.2); return 0;}
上面代码想把含有函数模板的类定义成普通类,通过传值(1.2)确定类型,但是函数定义的第一行会报错。
下面是对的:
#includeusing std::cout;using std::endl;template class lei{public: int a; void output(const T &b);};template void lei ::output(const T &b){ cout << b << endl;}int main(){ lei A; A.output(1.2); return 0;}
先实例化类模板,lei<int>A;执行后类中的T被int代替,因为成员函数的形参是int,所以函数实参必须是int。