关于宏重载已有很多问题/答案。但是,我无法找到将其应用于我的特定问题的方法。
我想在C中方便地为我的3D图像指定值。 现在,我这样做:
#define IMGET(im,y,x,c) im.data[(y)+im.height*((x)+im.width*(c))]
#define IMSET(im,y,x,c,v) IMGET(im,y,x,c)=v
效果很好。
但是,当我有只有2D的黑白图像时,我也想使用它。 像那样的东西:
#define IMGET(im,y,x,c) im.data[(y)+im.height*((x)+im.width*(c))] //3D case
#define IMSET(im,y,x,c,v) IMGET(im,y,x,c)=v //3D case
#define IMGET(im,y,x) im.data[(y)+im.height*(x)] //2D case
#define IMSET(im,y,x,v) IMGET(im,y,x)=v //2D case
有可能吗?
答案 0 :(得分:0)
@Potatoswatter的评论提供了一个非常好的通用解决方案。但对我的简单问题来说,这可能是一种过度杀伤。
看了之后,我找到了以下解决方案:
#define IMGET(im,y,x,...) im.data[(y)+im.height*((x)+im.width*(__VA_ARGS__+0))]
然后,我可以将此宏用于以下所有情况:
float val = IMGET(im,y,x,c);
或:
float val = IMGET(im,y,x,c);
如果我想要帮助,我会这样做:
IMGET(im,y,x,c)=val;
或
IMGET(im,y,x)=val;