普通函数转换为函数对象(function to functor)

如果要把一个普通的函数转换为函数对象该怎么做,比如我希望将一个globle_func(…)函数转换为函数对象,std::bind也可以将函数转化为函数对象,但是bind不够通用,使用的时候它只能绑定有限的参数,如果函数本身就是可变参数的就无法bind了,所以,这个函数对象必须是泛化的,类似于这样:

通过一个functor包装起来,调用的时候实际上是调用globle_function,这样是没问题的。但是,如果其他的函数也需要转换为函数对象呢,如果都按照这样方式去做显然存在大量重复的代码和操作,可以用宏来简化functor的定义。

测试代码

我们先定义了一个宏,这个宏根据参数来生成一个可变参数的函数对象,这个函数对象的类型名为tfn_加普通函数的函数名,之所以要加一个前缀tfn_,是为了避免类型名和函数名重名。define_functor_type宏只是定义了一个函数对象的类型,用起来略感不便,还可以再简化一下,让使用更方便。我们可以再定义一个宏来生成转换后的函数对象。

make_globle_functor生成了一个可以直接使用的全局函数对象,使用起来更方便了。

《普通函数转换为函数对象(function to functor)》有2个想法

发表评论