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

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

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

测试代码

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

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

array to tuple

 

rest_rpc新增异步客户端接口

rest_rpc新增了异步客户端接口,其设计的目的是为了简化异步接口的使用,还消除异步接口的使用限制条件。我们先来看看异步客户端是如何使用的。

一个可以运行的简单示例在这里。简而言之,async_client和call返回的task都是线程安全的。task的类型是根据用户定义的强类型协议来决定的,并且task接口是参照std::future来设计的,接口简单。

由于异步客户端的call接口立即返回的特性,用户极有可能在task.get()返回前再次调用call函数。所以rest_rpc的异步客户端的内部使用了一个链表来管理用户使用call函数的调用,保证request-response顺序的正确性。异步客户端除了有取消接口之外,还实现了超时。便于debug,超时时间目前都设置的是60s.配置task和链接超时的接口应该不久就会实现。

vs2015使用postgresql客户端

在官网下载安装包,在windows上安装。
安装之后会生成include和lib目录,我们就可以用生成库文件和dll文件。

– 数据库接口文件是libpq-fe.h,它会依赖include中的其他头文件;
– lib文件是libpq.lib;
– dll文件是:libeay32.dll,libecpg.dll,libecpg_compat.dll,libiconv-2.dll,libintl-8.dll,libpgtypes.dll,libpq.dll,libxml2.dll,libxslt.dll

假设你的服务器是已经启动了,并且创建了用户、数据库和表(具体如何创建可以参考[这篇文章])

下面看一个测试代码:

 

Copy Protected by Chetan's WP-Copyprotect.