在 C++ 中,执行泛型的深度克隆需要使用一些模板编程技巧。以下是一个简单的示例,展示了如何实现泛型的深度克隆:
#include<iostream>
#include<vector>
#include<memory>
template<typename T>
std::unique_ptr<T> deep_clone(const T& obj) {
return std::make_unique<T>(obj);
}
template<typename T>
std::unique_ptr<std::vector<T>> deep_clone(const std::vector<T>& obj) {
auto cloned_vector = std::make_unique<std::vector<T>>();
for (const auto& item : obj) {
cloned_vector->push_back(deep_clone(item));
}
return cloned_vector;
}
int main() {
std::vector<std::vector<int>> original = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
auto cloned = deep_clone(original);
// 修改原始数据以验证深度克隆
original[0][0] = 99;
std::cout << "Original:"<< std::endl;
for (const auto& row : original) {
for (const auto& item : row) {
std::cout<< item << " ";
}
std::cout<< std::endl;
}
std::cout << "Cloned:"<< std::endl;
for (const auto& row : *cloned) {
for (const auto& item : row) {
std::cout<< item << " ";
}
std::cout<< std::endl;
}
return 0;
}
在这个示例中,我们定义了两个模板函数:deep_clone
。第一个函数用于执行泛型的深度克隆,第二个函数用于处理 std::vector
类型的对象。
在 main
函数中,我们创建了一个 std::vector
对象,并使用 deep_clone
函数对其进行深度克隆。然后,我们修改了原始数据,以验证克隆是否是深度克隆。
这个示例展示了如何在 C++ 中执行泛型的深度克隆,但是请注意,这只是一个简单的示例,实际应用中可能需要更复杂的实现。
领取专属 10元无门槛券
手把手带您无忧上云