1

这可能听起来令人困惑,但是如何在一个 ARGUMENT 中传递 MULTIPLE ARGUMENTS。

我尝试过的是以下内容:

#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...

基本单词也是如此,我怎样才能在一个参数中传递多个参数,而不会搞砸......

谢谢你

4

2 回答 2

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 回答
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。

您可能想要查看的另一种技术称为Named Parameter Idiom,它更多的是不关心函数参数传入的顺序。由于它不完全清楚您在这里尝试做什么,我给了你一个几种可能的方法。

于 2012-12-13T20:53:46.617 回答