在C++中,你可以将成员函数的选择作为参数传递,但这通常涉及到使用函数指针、函数对象(也称为仿函数)或者C++11及以后版本中的lambda表达式。以下是几种实现这一功能的方法:
#include <iostream>
class MyClass {
public:
void printHello() { std::cout << "Hello" << std::endl; }
void printWorld() { std::cout << "World" << std::endl; }
};
void execute(MyClass& obj, void (MyClass::*func)()) {
(obj.*func)();
}
int main() {
MyClass obj;
execute(obj, &MyClass::printHello); // 输出 "Hello"
execute(obj, &MyClass::printWorld); // 输出 "World"
return 0;
}
#include <iostream>
#include <functional>
class MyClass {
public:
void printHello() { std::cout << "Hello" << std::endl; }
void printWorld() { std::cout << "World" << std::endl; }
};
int main() {
MyClass obj;
std::function<void()> funcHello = [&obj]() { obj.printHello(); };
std::function<void()> funcWorld = [&obj]() { obj.printWorld(); };
funcHello(); // 输出 "Hello"
funcWorld(); // 输出 "World"
return 0;
}
#include <iostream>
#include <functional>
class MyClass {
public:
void printHello() { std::cout << "Hello" << std::endl; }
void printWorld() { std::cout << "World" << std::endl; }
};
int main() {
MyClass obj;
auto funcHello = [&obj]() { obj.printHello(); };
auto funcWorld = [&obj]() { obj.printWorld(); };
funcHello(); // 输出 "Hello"
funcWorld(); // 输出 "World"
return 0;
}
这种技术通常用于实现回调函数、策略模式或者工厂模式等设计模式。例如,当你需要编写一个可以接受不同操作作为参数的通用函数时,你可以使用上述方法之一来传递成员函数。
std::function
和lambda表达式可以提供更好的类型安全。通过上述方法,你可以灵活地将成员函数作为参数传递,从而提高代码的复用性和灵活性。
领取专属 10元无门槛券
手把手带您无忧上云