在C++中,Functor(也称为函数对象)是一种可调用对象,它可以像函数一样被调用。Functor可以是一个类,重载了函数调用运算符operator(),也可以是一个函数指针或函数引用。
类型擦除是一种技术,用于在运行时忽略模板类型参数并将其视为相同类型。在使用Functor时,可以使用模板来实现类型擦除,使得可以将不同类型的Functor传递给相同的函数或类。
以下是一个简单的示例,演示了如何在C++中使用类型擦除来接受不同类型的Functor:
#include <iostream>
template <typename Functor>
void call(Functor func) {
func();
}
class MyFunctor {
public:
void operator()() {
std::cout << "MyFunctor called" << std::endl;
}
};
int main() {
MyFunctor myFunc;
call(myFunc);
return 0;
}
在上面的示例中,我们定义了一个模板函数call,它接受一个Functor作为参数并调用它。我们将MyFunctor作为参数传递给call函数,即使MyFunctor是一个自定义的类,也可以成功调用。这是因为模板函数call使用了类型擦除,将传递的Functor视为相同类型。