在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視為相同類型。