C++中可模板化的类成员函数有哪些?(含构造、析构等类型)
C++类成员函数的模板化情况
你的理解完全正确:除析构函数外,构造函数、const成员函数、static成员函数都可以被模板化。下面分类型说明:
构造函数与析构函数
构造函数支持模板化,可实现泛型对象构造逻辑;但析构函数是特殊成员函数,C++标准明确禁止将其声明为模板。
示例代码:
#include <iostream> using namespace std; class A { public: // 模板构造函数 template<class T> A(T t) { cout << t << endl; } /* 以下代码会编译报错:析构函数不能被声明为模板 template<class U> ~A() { cout << "Destructor\n"; } */ }; int main() { A a(5); // 实例化模板构造函数A<int>(int) }
静态成员函数
静态成员函数支持模板化,模板参数可用于定义泛型静态逻辑。
示例代码:
#include <iostream> #include <vector> using namespace std; class A { public: template<typename T> static double foo(vector<T> arr); }; // 类外定义模板静态成员函数 template<typename T> double A::foo(vector<T> arr) { cout << arr[0] << endl; return 0.0; } int main() { A::foo<int>({1, 2, 3}); // 调用模板静态函数A::foo<int> }
const/非const成员函数
无论成员函数是否带有const修饰符,都可以被模板化,用于实现泛型成员逻辑。
示例代码:
#include <iostream> #include <vector> using namespace std; class A { public: // const修饰的模板成员函数 template<typename T> double foo(vector<T> arr) const { cout << arr[0] << endl; return 0.0; } }; int main() { A a; a.foo<int>({1, 2, 3}); // 调用模板成员函数A::foo<int> }
内容的提问来源于stack exchange,提问作者mascai
相关产品推荐
相关产品推荐

