请高手给解释解释下面的宏定义,展看是个什么东东?多谢!

snowdragon 2003-10-17 03:02:32
这是Mysql++中的宏定义,俺没有看懂,在此请教了
-------------------------------
#define mysql_query_define0(RETURN, FUNC)\
RETURN FUNC (ss a)\
{return FUNC (parms() << a);}\
RETURN FUNC (ss a, ss b)\
{return FUNC (parms() << a << b);}\
RETURN FUNC (ss a, ss b, ss c)\
{return FUNC (parms() << a << b << c);}\
RETURN FUNC (ss a, ss b, ss c, ss d)\
{return FUNC (parms() << a << b << c << d);}\
RETURN FUNC (ss a, ss b, ss c, ss d, ss e)\
{return FUNC (parms() << a << b << c << d << e);} \
RETURN FUNC (ss a, ss b, ss c, ss d, ss e, ss f)\
{return FUNC (parms() << a << b << c << d << e << f);}\
RETURN FUNC (ss a, ss b, ss c, ss d, ss e, ss f, ss g)\
{return FUNC (parms() << a << b << c << d << e << f << g);}\
RETURN FUNC (ss a, ss b, ss c, ss d, ss e, ss f, ss g, ss h)\
{return FUNC (parms() << a << b << c << d << e << f << g << h);}\
RETURN FUNC (ss a, ss b, ss c, ss d, ss e, ss f, ss g, ss h, ss i)\
{return FUNC (parms() << a << b << c << d << e << f << g << h << i);}\
RETURN FUNC (ss a,ss b,ss c,ss d,ss e,ss f,ss g,ss h,ss i,ss j)\
{return FUNC (parms() <<a <<b <<c <<d <<e <<f <<g <<h <<i <<j);}\
RETURN FUNC (ss a,ss b,ss c,ss d,ss e,ss f,ss g,ss h,ss i,ss j,ss k)\
{return FUNC (parms() <<a <<b <<c <<d <<e <<f <<g <<h <<i <<j <<k);}\
RETURN FUNC (ss a,ss b,ss c,ss d,ss e,ss f,ss g,ss h,ss i,ss j,ss k,\
ss l)\
{return FUNC (parms() <<a <<b <<c <<d <<e <<f <<g <<h <<i <<j <<k <<l);}\

#define mysql_query_define_const1(RETURN, FUNC) \
RETURN FUNC () const {return FUNC (def);} \
RETURN FUNC (query_reset r) {return FUNC (def,r);} \
RETURN FUNC (const char* str) const; \
RETURN FUNC (const parms &p) const; \
RETURN FUNC (const parms &p, query_reset r);\
mysql_query_define0(RETURN,FUNC) \

#define mysql_query_define1(RETURN, FUNC) \
RETURN FUNC (query_reset r = RESET_QUERY) {return FUNC (def,r);} \
RETURN FUNC (const char* str); \
RETURN FUNC (parms &p, query_reset r = RESET_QUERY);\
mysql_query_define0(RETURN,FUNC) \

#define mysql_query_define2(FUNC) \
template <class T1> void FUNC (T1 &con, query_reset r = RESET_QUERY) {FUNC (con, def,r);} \
template <class T1> void FUNC (T1 &con, const char* str); \
template <class T1> void FUNC (T1 &con, parms &p, query_reset r = RESET_QUERY);\
template <class T1> void FUNC (T1 &con, ss a)\
{FUNC (con, parms() << a);}\
template <class T1> void FUNC (T1 &con, ss a, ss b)\
{FUNC (con, parms() << a << b);}\
template <class T1> void FUNC (T1 &con, ss a, ss b, ss c)\
{FUNC (con, parms() << a << b << c);}\
template <class T1> void FUNC (T1 &con, ss a, ss b, ss c, ss d)\
{FUNC (con, parms() << a << b << c << d);}\
template <class T1> void FUNC (T1 &con, ss a, ss b, ss c, ss d, ss e)\
{FUNC (con, parms() << a << b << c << d << e);} \
template <class T1> void FUNC (T1 &con, ss a, ss b, ss c, ss d, ss e, ss f)\
{FUNC (con, parms() << a << b << c << d << e << f);}\
template <class T1> void FUNC (T1 &con,ss a,ss b,ss c,ss d,ss e,ss f,ss g)\
{FUNC (con, parms() << a << b << c << d << e << f << g);}\
template <class T1> void FUNC (T1 &con,ss a,ss b,ss c,ss d,ss e,ss f,ss g,ss h)\
{FUNC (con, parms() << a << b << c << d << e << f << g << h);}\
template <class T1> void FUNC (T1 &con, ss a, ss b, ss c, ss d, ss e, ss f, ss g, ss h, ss i)\
{FUNC (con, parms() << a << b << c << d << e << f << g << h << i);}\
template <class T1> void FUNC (T1 &con, ss a,ss b,ss c,ss d,ss e,ss f,ss g,ss h,ss i,ss j)\
{FUNC (con, parms() <<a <<b <<c <<d <<e <<f <<g <<h <<i <<j);}\
template <class T1> void FUNC (T1 &con, ss a,ss b,ss c,ss d,ss e,ss f,ss g,ss h,ss i,ss j,ss k)\
{FUNC (con, parms() <<a <<b <<c <<d <<e <<f <<g <<h <<i <<j <<k);}\
template <class T1> void FUNC (T1 &con, ss a,ss b,ss c,ss d,ss e,ss f,ss g,ss h,ss i,ss j,ss k,\
ss l)\
{FUNC (con, parms() <<a <<b <<c <<d <<e <<f <<g <<h <<i <<j <<k <<l);}\
...全文
35 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
snowdragon 2003-10-21
  • 打赏
  • 举报
回复
还没有看到结论呢
Wolf0403 2003-10-20
  • 打赏
  • 举报
回复
应该是 parms() 返回一个 ostream& 对象,然后把 a/b/c 插入这个流对象。
snowdragon 2003-10-20
  • 打赏
  • 举报
回复
再问:
parms() << a << b << c);

这是什么意思???
TianGuangZao 2003-10-20
  • 打赏
  • 举报
回复
我觉得不错,通过宏来减少函数调用的开销。
snowdragon 2003-10-20
  • 打赏
  • 举报
回复
查源码看到的如下内容:
typedef const SQLString& ss;
typedef SQLQueryParms parms;

我不解的是:parms() << a << b << c);
parms() 直接就会返回一个SQLQueryParms对象吗?

这样写的好处是什么???
snowdragon 2003-10-20
  • 打赏
  • 举报
回复
请继续讨论,多谢
liansdan 2003-10-20
  • 打赏
  • 举报
回复
听课!!!!!
sevencat 2003-10-17
  • 打赏
  • 举报
回复
俺也看过几次了
stlsoft里面有这种东东
boost里面也有类似的东东。
liao2001 2003-10-17
  • 打赏
  • 举报
回复
to oyd(cplusplus):
我说的“垃圾”不是指这种写法的实用价值,因为我有个时候也会用到它,这不就是宏定义的一个优点吗?
我说的“垃圾”是指它的风格,至少我一看到就不愿再继续看了,难道你写的代码就永久自己看?
nbb 2003-10-17
  • 打赏
  • 举报
回复
就是一组重载函数的定义:
RETURN FUNC (ss a){ return FUNC (parms() << a); }
RETURN FUNC (ss a, ss b){ return FUNC (parms() << a << b); }
RETURN FUNC (ss a, ss b, ss c){ return FUNC (parms() << a << b << c); }
RETURN FUNC (ss a, ss b, ss c, ss d){
return FUNC (parms() << a << b << c << d);
}
......
其余依此类推
zoohoo 2003-10-17
  • 打赏
  • 举报
回复
代码写的很次,至少有两种方式可以写出更加简洁的代码。
看看可变参数的函数用法,这样的编程决定不应该提倡
oyd 2003-10-17
  • 打赏
  • 举报
回复
写这代码的不是垃圾,你到那种情况也会那么写的。
例如:mysql_query_define0(RETURN, FUNC)这个宏,你可以搜一下,大约会在至少2个地方被使用。
如果你要写大量的重复代码,而且它们又有细微差别,并且你不知道这些重复代码会不会就这样定下来的时候,你不用宏用什么?难道以后要修改的时候,把成百个函数手工或者用工具挨个改一遍?
lp1983 2003-10-17
  • 打赏
  • 举报
回复
这个宏定义,不是把一东西付给一个值,而是赋予一个函数。
liao2001 2003-10-17
  • 打赏
  • 举报
回复
就和模版差不多,不过写这代码的人真垃圾!
liao2001 2003-10-17
  • 打赏
  • 举报
回复
不就是定义或者申明了很多函数吗?
drip 2003-10-17
  • 打赏
  • 举报
回复
太复杂了!

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧