You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:03:32