1

これは紛らわしいかもしれませんが、1 つの ARGUMENT で複数の ARGUMENT を渡すにはどうすればよいでしょうか。

私が試したことは次のとおりです。

#define CALL(v, look, param, expect) v(param){look(expect);}

使用例(動かない):

void CALL(InitD3D, engine->InitD3D, (HWND hWnd, bool windowed), (hWnd, windowed))

// Which should give(i want it to):
// void InitD3D(HWND hWnd, bool windowed){engine->InitD3D(hWnd, windowed);}
// But it may give: InitD3D((HWND hWnd, bool windowed)){engine->InitD3D((hWnd, windowed));}
// Or something similar or not...

基本的な言葉もそうです、どうすれば1つの引数で複数の引数を台無しにせずに渡すことができますか...

ありがとうございました

4

2 に答える 2

1

複数の引数を渡す最も簡単な方法は、構造体を使用することです。

例:

typedef struct{
    int arg1;
    std::string arg2;
    int arg3;
} fn_args;

void bob( fn_args a )
{
   //access them using a.arg1, a.arg2, etc.
}

編集:あなたはVA_ARGSについて言及しました。これは、渡す引数の数が可変である場合に使用されます。通常、VA_ARGSを使用しなくても、ほとんどの問題を解決できます。

あなたが見たいと思うかもしれないもう一つのテクニックは、名前付きパラメータイディオムと呼ばれます。これは、関数の引数が渡される順序を気にしないことに関するものです。ここで何をしようとしているのかが完全には明確ではないため、いくつかの可能なアプローチ。

于 2012-12-13T20:53:46.617 に答える
1
#define CALL(v, look, param, expect) v param {look expect;}

namespace foo {
  void bob(int x, int y) {}
}
CALL(void bob, foo::bob, (int x, int y), (x,y))

int main() {
  bob(7,2);
}

私はこのテクニックに反対することをお勧めします。

于 2012-12-13T20:46:33.973 に答える