第二节 · 容器类型的传递 · 转发模板

类模板让我们能够定义与类型无关的类,比如标准库中的 vectormap 都是类模板。


基本类模板

template<typename T>
class Stack
{
private:
    vector<T> data;
    
public:
    void push(const T& value)
    {
        data.push_back(value);
    }
    
    T pop()
    {
        T top = data.back();
        data.pop_back();
        return top;
    }
    
    bool empty() const
    {
        return data.empty();
    }
};

int main()
{
    Stack<int> intStack;
    intStack.push(1);
    intStack.push(2);
    cout << intStack.pop() << endl;  // 2
    
    Stack<string> stringStack;
    stringStack.push("hello");
    stringStack.push("world");
    cout << stringStack.pop() << endl;  // world
    
    return 0;
}

多个模板参数


默认模板参数


成员函数模板


类模板特化


类型萃取


CRTP(奇异递归模板模式)


类模板的友元


模板别名


习题

  • 实现一个通用的 LinkedList 类模板。

  • 为特定类型特化一个类模板以提供优化实现。

  • 解释 CRTP 的工作原理和应用场景。

Last updated