template <模板参数列表> class 类名 { public: 返回值类型 operator()(函数参数列表) { // 函数体 } // 其他成员函数和数据成员... };以下是一个简单的 C++ 示例:
#include <iostream> class Adder { public: int operator()(int a, int b) { return a + b; } }; int main() { Adder add; // 创建函数对象实例 int result = add(3, 4); // 使用函数对象 std::cout << "3 + 4 = " << result << std::endl; return 0; }示例中的 Adder 是一个函数对象,它接受两个整数参数,并返回它们的和。在 main 函数中,我们创建了这个函数对象的一个实例并调用它,就像它是一个函数一样。
3 + 4 = 7
#include <iostream> #include <vector> // 定义策略枚举 enum Strategy { EVEN, // 查找第一个偶数 ODD, // 查找第一个奇数 GREATER_THAN_5 // 查找第一个大于5的数 }; int find_if(const std::vector<int>& vec, Strategy strategy) { for (int num : vec) { switch (strategy) { case EVEN: if (num % 2 == 0) return num; break; case ODD: if (num % 2 != 0) return num; break; case GREATER_THAN_5: if (num > 5) return num; break; default: break; } } return -1; // 表示未找到 } int main() { std::vector<int> numbers = {3, 4, 7, 8, 9}; std::cout << "First even number: " << find_if(numbers, EVEN) << std::endl; std::cout << "First odd number: " << find_if(numbers, ODD) << std::endl; std::cout << "First number greater than 5: " << find_if(numbers, GREATER_THAN_5) << std::endl; return 0; }示例中定义了一个 find_if() 函数,该函数根据传入的策略枚举值来查找满足特定条件的第一个元素。虽然这种方法在某些情况下可能会有用,但它不够灵活。如果要增加新的策略,就需要修改枚举和 find_if() 函数的内部逻辑。
#include <iostream> #include <vector> typedef bool (*StrategyFunc)(int); bool isEven(int num) { return num % 2 == 0; } bool isOdd(int num) { return num % 2 != 0; } bool isGreaterThanFive(int num) { return num > 5; } int find_if(const std::vector<int>& vec, StrategyFunc strategy) { for (int num : vec) { if (strategy(num)) { return num; } } return -1; // 表示未找到 } int main() { std::vector<int> numbers = {3, 4, 7, 8, 9}; std::cout << "First even number: " << find_if(numbers, isEven) << std::endl; std::cout << "First odd number: " << find_if(numbers, isOdd) << std::endl; std::cout << "First number greater than 5: " << find_if(numbers, isGreaterThanFive) << std::endl; return 0; }在上面的代码中,我们定义了三种策略函数:isEven()、isOdd() 和 isGreaterThanFive()。find_if() 函数接受一个函数指针作为策略,然后根据这个函数指针来查找满足条件的第一个元素。
#include <iostream> #include <vector> class Finder { private: int target; public: // 构造函数,设置要查找的目标数据 Finder(int t) : target(t) {} // 重载()操作符,使其可以被调用如同一个函数 bool operator()(int num) const { return num == target; } }; int find_if(const std::vector<int>& vec, const Finder& strategy) { for (int num : vec) { if (strategy(num)) { return num; } } return -1; // 表示未找到 } int main() { std::vector<int> numbers = {3, 4, 7, 8, 9}; // 创建一个函数对象,用于查找数字7 Finder findSeven(7); int result = find_if(numbers, findSeven); if (result != -1) { std::cout << "Found the number: " << result << std::endl; } else { std::cout << "Number not found." << std::endl; } return 0; }在上面的代码中,我们定义了一个名为 Finder 的类。这个类的对象可以像函数一样被调用,因为它重载了 operator()。
本文链接:http://task.lmcjl.com/news/4346.html