【C++】模板嵌套
模板嵌套
1.模板模板参数:允许将一个“模板”作为另一个模板的参数传入。
template<template<typename> class Container, typename T>
class Wrapper {
public:
Container<T> data;
};
使用示例:
Wrapper<std::vector, int> w; // std::vector<int>
2. 类模板中类嵌套模板
template<typename T>
class Outer {
public:
template<typename U>
class Inner {
public:
void show() {
std::cout << "Outer<" << typeid(T).name()
<< ">::Inner<" << typeid(U).name() << ">" << std::endl;
}
};
};
使用示例:
Outer<int>::Inner<double> obj;
obj.show();
// 输出类似:Outer<i>::Inner<d>
#include <vector>
#include <list>
#include <iostream>
// 定义一个可以接受任何单参数容器模板的类
template <template<typename> class Container>
class Stack {
private:
Container<int> data;
public:
void push(int value) {
data.push_back(value);
}
void pop() {
if (!data.empty()) {
data.pop_back();
}
}
int top() const {
return data.back();
}
bool empty() const {
return data.empty();
}
};
int main() {
Stack<std::vector> vectorStack; // 使用vector作为底层容器
Stack<std::list> listStack; // 使用list作为底层容器
vectorStack.push(1);
vectorStack.push(2);
std::cout << vectorStack.top() << std::endl; // 输出: 2
return 0;
}
#include <map>
#include <unordered_map>
#include <string>
// 接受双参数容器模板
template <template<typename, typename> class Container>
class Dictionary {
private:
Container<std::string, int> data;
public:
void insert(const std::string& key, int value) {
data[key] = value;
}
int find(const std::string& key) const {
auto it = data.find(key);
return (it != data.end()) ? it->second : -1;
}
};
int main() {
Dictionary<std::map> orderedDict; // 使用map
Dictionary<std::unordered_map> hashDict; // 使用unordered_map
orderedDict.insert("apple", 5);
hashDict.insert("banana", 3);
return 0;
}

浙公网安备 33010602011771号