68336016 发表于 2011-6-7 11:55:47

请问:这里的#define语句该如何理解呢?

#define CAMERA_BACKWARD_COMPATIBILITY_SET( aName, aID, aType ) \
    CyResult Set##aName( aTypeaValue )       { return SetParameter( aID, aValue ); }

#define CAMERA_BACKWARD_COMPATIBILITY_GET( aName, aID, aType ) \
    CyResult Get##aName( aType& aValue ) const { return GetParameter( aID, aValue ); }


#define CAMERA_BACKWARD_COMPATIBILITY( aName, aID, aType ) \
    CAMERA_BACKWARD_COMPATIBILITY_SET( aName, aID, aType ) \
    CAMERA_BACKWARD_COMPATIBILITY_GET( aName, aID, aType )


此处有3行,到底哪个替代哪个呢?

little_Monkey 发表于 2011-6-7 12:08:01

三个都定义,

Comedian 发表于 2011-6-7 12:08:58

\ 貌似是续行符。其实只有一行。
CAMERA_BACKWARD_COMPATIBILITY_SET、CAMERA_BACKWARD_COMPATIBILITY_GE肯定在其他地方被define了吧?把CAMERA_BACKWARD_COMPATIBILITY_SET、CAMERA_BACKWARD_COMPATIBILITY_GE换成define后的结果,再看这代码就知道结果了。

ps。仅个人看法。期待某楼神人出现拍砖

68336016 发表于 2011-6-7 13:04:26

回复【2楼】Comedian
\ 貌似是续行符。其实只有一行。
camera_backward_compatibility_set、camera_backward_compatibility_ge肯定在其他地方被define了吧?把camera_backward_compatibility_set、camera_backward_compatibility_ge换成define后的结果,再看这代码就知道结果了。
ps。仅个人看法。期待某楼神人出现拍砖
-----------------------------------------------------------------------

楼主位已经补充

如果只是宏替换一个函数,我可以理解,问题是这里有3行,等于前面替换后面2行,等于替代2个函数,就费解了

Comedian 发表于 2011-6-7 14:44:32

回复【3楼】68336016
-----------------------------------------------------------------------

根据你在楼主位补充的内容看来:
CAMERA_BACKWARD_COMPATIBILITY_SET( aName, aID, aType )被替换成一个函数
CyResult Set##aName( aTypeaValue )      
{
   return SetParameter( aID, aValue );
}
函数的返回类型是CyResult,函数名是Set##aName(##表示连接),函数的形参是aType、aValue,函数的功能是return SetParameter( aID, aValue );。
同理CAMERA_BACKWARD_COMPATIBILITY_GET( aName, aID, aType )被替换成另一个函数
CyResult Get##aName( aType& aValue ) const
{
return GetParameter( aID, aValue );
}



那么CAMERA_BACKWARD_COMPATIBILITY( aName, aID, aType )就被替换成这两个函数。也就是遇到CAMERA_BACKWARD_COMPATIBILITY( aName, aID, aType ),相当于写了
CyResult Set##aName( aTypeaValue )      
{
   return SetParameter( aID, aValue );
}
CyResult Get##aName( aType& aValue ) const
{
return GetParameter( aID, aValue );
}

不知道我说的对不对?但是有一点,#define仅仅是文本替代,本着这个原则应该就像上面这样理解的。
页: [1]
查看完整版本: 请问:这里的#define语句该如何理解呢?