#include <stdio.h>
// 模板,可以调用函数或者Functor
template <typename Functor>
void TestTemplate(Functor func)
{
func("TestTemplate");
}
// C函数风格
void TestFunction(const char* str)
{
printf("TestFunction:%s ", str);
}
// Functor风格
struct TestFunctor
{
void operator()(const char* str)
{
printf("TestFunctor:%s ", str);
}
TestFunctor()
{
printf("TestFunctor() ");
}
~TestFunctor()
{
printf("~TestFunctor() ");
}
};
int main()
{
TestTemplate(TestFunction); //函数指针作为调用参数
printf("========================================== ");
TestTemplate( TestFunctor() ); //Functor临时对象作为调用参数
printf("========================================== ");
TestFunctor obj; //生成一个Functor的实例
TestTemplate<TestFunctor&>(obj); //使用引用类型来调用,避免拷贝
return 1;
}