程序中遇到些不好理解的地方, 有人能帮忙解释下么
#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为传入变量或者值
就会替换成
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, }; };}
[解决办法]
先不看\,看下那个命名空间的内容不就好理解了