gpt4 book ai didi

N 维数组赋值的 C 宏重载

转载 作者:行者123 更新时间:2023-11-30 17:51:31 25 4
gpt4 key购买 nike

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

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

可能吗?

最佳答案

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

关于N 维数组赋值的 C 宏重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16682609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com