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