看了一下mysqlpp中的manip.h这个头文件,大概了解mysqlpp中的escape和quote中的实现方式
msyqlpp::escape和mysqlpp::quote分别是枚举类型quote_type0和枚举类型escape_type0的一个值。
在头文件里面定义了quote_type1 operator << (SQLQueryParms & o, quote_type0);(大概是这样的)
这个quoto_type1是一个简单封装的结构体,里面有一个SQLParam指针类型的成员。这个operator <<函数的作用就是,把参数中的o放到一个新的quoto_type1中的SQLParam指针中,然后这个函数返回这个quote_type1。
然后,后面又有一个SQLParam & operator << (quote_type1 qtype, SQLTypeAdapter & in);
这个函数里面的in参数应该就是query << "..."中query后面的一些参数,就是一个sql查询的内容。
其实原理就是,通过一个枚举值还有一个重载的函数,将一个普通的SQLQueryParms转换成一个“特殊”的quote_type1类型,然后又通过重载一个quote_type1的函数,在这个函数里面实现内容的转义或者加上括号。
就是通过一个“诱饵”把特定的鱼掉上钩,然后让这条鱼区别于普通鱼,做一些特殊的事。学习了~
`