在C++中,如果你想要将不同模板参数值但类型相同的值放入该类型的变量中,可以使用模板特化和类型萃取的技术。下面是一个简单的示例,展示了如何实现这一点:
假设我们有一个模板类 Container
,我们希望它可以存储不同模板参数值但类型相同的值。
#include <iostream>
#include <vector>
// 通用模板类
template <typename T, int N>
class Container {
public:
void add(const T& value) {
data.push_back(value);
}
void print() const {
for (const auto& item : data) {
std::cout << item << " ";
}
std::cout << std::endl;
}
private:
std::vector<T> data;
};
// 模板特化版本,用于处理特定情况
template <typename T>
class Container<T, 0> {
public:
void add(const T& value) {
// 特殊处理逻辑
std::cout << "Special handling for N=0" << std::endl;
data.push_back(value);
}
void print() const {
for (const auto& item : data) {
std::cout << item << " ";
}
std::cout << std::endl;
}
private:
std::vector<T> data;
};
int main() {
Container<int, 1> c1;
c1.add(10);
c1.add(20);
c1.print(); // 输出: 10 20
Container<int, 0> c0;
c0.add(30);
c0.add(40);
c0.print(); // 输出: Special handling for N=0 30 40
return 0;
}
Container
类模板,它可以处理任意类型的 T
和任意整数 N
。N=0
的情况提供了一个特化版本,可以在这个特化版本中实现特殊的逻辑。main
函数中,分别创建了 Container<int, 1>
和 Container<int, 0>
的实例,并展示了它们的不同行为。static_assert
或其他类型检查手段确保类型一致性。通过这种方式,你可以灵活地处理不同模板参数值但类型相同的值,并且保持代码的清晰和可维护性。
领取专属 10元无门槛券
手把手带您无忧上云