首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

程序中遇到些不好理解的地方, 有人能帮忙解释下么,该如何解决

2012-03-14 
程序中遇到些不好理解的地方, 有人能帮忙解释下么#define VMAKE_IID(moduleID,iivOffset) (static_castVI

程序中遇到些不好理解的地方, 有人能帮忙解释下么
#define VMAKE_IID(moduleID,iivOffset) (static_cast<VIID>((moduleID)+(iivOffset)) )
typedef longVIID;


namespace v12iids
{
template<VIID iid>
class IID_T
{
};
}

#define VDEFINE_IID_CONST(iidName,mid,iidOffset) \
namespace v12iids\
{ \
template<> \
class IID_T<VMAKE_IID(mid,iidOffset)> \
{ \
public: \
enum{ \
code=VMAKE_IID(mid,iidOffset), \
}; \
private: \
enum{ \
checkMidByteBe0=v12check::Check<(mid&0x000000FF)==0>::check, \
checkOffsetBeByte=v12check::Check<(iidOffset&0xFFFFFF00)==0>::check, \
}; \
}; \
} \
const VIID iidName(v12iids::IID_T<VMAKE_IID(mid,iidOffset)>::code);

 **************************************************
以前没有用过复杂的#define,
想请教如何解释下面这条语句,请尽量详细些。
VDEFINE_IID_CONST(vIID_PolyLineShape,vMID_V12Shape,4)

[解决办法]
好理解。
把#define那行去掉
去掉每行后面的\
用define里的参数替换里面的变量
然后,再看看,就明白了
[解决办法]
宏是啥?
就是一个符号替换公式

假如代码中出现 VDEFINE_IID_CONST(iidName,mid,iidOffset) 这条语句
iidName,mid,iidOffset为传入变量或者值

就会替换成

C/C++ code
namespace v11iids{   template<>   class IID_T <VMAKE_IID(mid,iidOffset) >  //VMAKE_IID这个将被定义的宏替换    {    public:       enum{      code=VMAKE_IID(mid,iidOffset),       };    private:       enum{        checkMidByteBe0=v12check::Check <(mid&0x000000FF)==0 >::check,         checkOffsetBeByte=v12check::Check <(iidOffset&0xFFFFFF00)==0 >::check,      };    };}
[解决办法]
先不看\,看下那个命名空间的内容不就好理解了

热点排行