2012-12-13 5 views
1

혼란 스러울 수 있지만 여러 인수를 한 인수에 어떻게 전달할 수 있습니까? 나는 무엇을 시도했다C++ 한 인수에 여러 인수 전달

은 다음과 같다 : 그것을 사용하는 경우

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

그래서 기본적인 단어입니다, 내가 여러 인수를 전달할 수있는 방법 그것을 망쳐없이 하나 개의 인수, ...

당신에게

+0

실제로이 작업을 수행하려면 무엇을하려고합니까? 아마 그걸 할 수있는 더 좋은 방법이있을 것입니다 ... – Mehrdad

+0

불렀던 것을 고쳐주었습니다 : __VA_ARGS__ –

답변

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); 
} 
감사

이 기술에 대한 조언을 드리겠습니다.

+0

고마워요! 이것은 정말로 나를 도왔다. –

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입니다.이 함수는 함수 인수가 전달되는 순서를 신경 쓰지 않는 것에 대한 것입니다. 여기에서 수행하려고 시도하는 것이 명확하지 않으므로, 너에게 몇 가지 가능한 접근법.