【问题标题】:C macro overloading for N-D arrays assignmentN-D 数组赋值的 C 宏重载
【发布时间】:2013-05-22 02:39:13
【问题描述】:

已经有很多关于宏重载的问题/答案。但是,我找不到将其应用于我的特定问题的方法。

我想在 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

有可能吗?

【问题讨论】:

标签: c macros


【解决方案1】:

@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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 2021-11-27
    • 2011-05-06
    • 1970-01-01
    • 2013-03-30
    相关资源
    最近更新 更多