在C++中,使用函数对象(也称为仿函数)进行模板编程可以让你编写更加通用和可重用的代码。函数对象是一个类,它重载了()运算符,使其可以像函数一样被调用。这里有一个简单的例子,展示了如何使用模板函数对象:
#include <iostream>
#include <vector>
#include <algorithm>
// 定义一个模板函数对象
template<typename T>
class MyFunctor {
public:
T operator()(const T& a, const T& b) const {
return a + b;
}
};
int main() {
// 使用模板函数对象对整数向量进行操作
std::vector<int> nums1 = {1, 2, 3, 4, 5};
std::vector<int> nums2 = {6, 7, 8, 9, 10};
MyFunctor<int> add;
std::vector<int> result1 = std::transform(nums1.begin(), nums1.end(), nums2.begin(), result1.begin(), add);
// 使用模板函数对象对浮点数向量进行操作
std::vector<float> nums3 = {1.1, 2.2, 3.3, 4.4, 5.5};
std::vector<float> nums4 = {6.6, 7.7, 8.8, 9.9, 10.1};
MyFunctor<float> add_float;
std::vector<float> result2 = std::transform(nums3.begin(), nums3.end(), nums4.begin(), result2.begin(), add_float);
// 输出结果
std::cout << "Result for integers: ";
for (int num : result1) {
std::cout << num << " ";
}
std::cout << std::endl;
std::cout << "Result for floats: ";
for (float num : result2) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
在这个例子中,我们定义了一个名为MyFunctor
的模板类,它接受一个类型参数T
。这个类重载了()运算符,使其可以像函数一样被调用。我们在main
函数中创建了两个不同类型的向量(整数和浮点数),并使用MyFunctor
对它们进行操作。注意,我们为每个向量创建了不同的实例(add
和add_float
),以便根据向量的类型调用正确的函数对象。