📜  c++ 类中的模板函数(1)

📅  最后修改于: 2023-12-03 14:59:49.552000             🧑  作者: Mango

C++ 类中的模板函数

简介

在 C++ 中,模板是一种可以实现泛型编程的机制。其中,模板函数是基于类型的函数,它可以应用到任何类型的数据上。而当模板函数在类中进行定义时,我们称之为类模板。

类模板中的模板函数,既可以是成员函数,又可以是静态函数。在类模板中,模板函数的具体实现要留到模板实例化时去完成。

代码示例

下面给出一个简单的类模板示例,其中包含了一个成员模板函数和一个静态模板函数:

template<typename T>
class MyClass {
public:
    // 成员模板函数
    template<typename U>
    void memberFunc(U val) {
        cout << "Member template function: " << val << endl;
    }

    // 静态模板函数
    template<typename U>
    static void staticFunc(U val) {
        cout << "Static template function: " << val << endl;
    }
};

在上述代码中,MyClass 是一个类模板,它有一个成员模板函数 memberFunc 和一个静态模板函数 staticFunc。其中,TU 都是类型参数,用来指定 MyClass 的实际类型和函数参数的类型。

接下来,我们可以通过实例化 MyClass 来使用它们:

int main() {
    MyClass<int> obj1;
    MyClass<double> obj2;

    obj1.memberFunc("hello");   // 调用 memberFunc<string>
    obj1.staticFunc("world");   // 调用 staticFunc<string>

    obj2.memberFunc(123);       // 调用 memberFunc<int>
    obj2.staticFunc(3.14);      // 调用 staticFunc<double>

    return 0;
}

上述代码中,我们定义了两个 MyClass 对象 obj1obj2,分别用 intdouble 实例化。然后,我们分别调用了它们的成员模板函数和静态模板函数,并传入不同类型的参数。

运行上述代码,输出如下:

Member template function: hello
Static template function: world
Member template function: 123
Static template function: 3.14

从输出结果可以看出,通过类模板中的模板函数,我们可以处理不同类型的数据,并使代码更具有通用性和可重用性。

总结

通过使用 C++ 类模板中的模板函数,我们可以实现更加灵活和通用的代码,同时可以减少代码的重复度。因此,在实际开发中,使用模板是非常重要的。但是,模板也存在一些问题,如编译时间长、代码量大等,因此,在使用模板时,我们需要注意它们的使用场景和性能问题。