0

マクロのオーバーロードについては、すでに多くの質問/回答があります。しかし、それを自分の問題に適用する方法が見つかりません。

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

出来ますか?

4

1 に答える 1

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;
于 2013-05-23T05:01:02.470 に答える