클래스를 사용하여 배열 배열에 대해 void를 호출합니다. 이 무효는 아래의 코드와 같이 보이며 여러 가지 인수를 제공 할 수있는 charf에 대한 정의를 작성하려고합니다. 아래의 코드를 보면 어떤 수의 인수를 제공해야하는지 이유를 알 수 있습니다.C++에서 여러 개의 인수를 제공하는 함수를 만드는 방법은 무엇입니까?
void Player::drawOptions()
{
u32 _q;
const char *buffer;
char *_1 = optBuf[0], *_2 = optBuf[1], *_3 = optBuf[2], *_4 = optBuf[3], *_5 = optBuf[4], *_6 = optBuf[5], *_7 = optBuf[6], *_8 = optBuf[7], *_9 = optBuf[8], *_10 = optBuf[9], *_11 = optBuf[10], *_12 = optBuf[11], *_13 = optBuf[12], *_14 = optBuf[13], *_15 = optBuf[14], *_16 = optBuf[15], *_17 = optBuf[16], *_18 = optBuf[17];
for(_q = 0; _q<17; _q++)
switch(_q)
{
case 1:buffer = charf("&s", _1);break;
case 2:buffer = charf("%s\n%s", _1, _2);break;
case 3:buffer = charf("%s\n%s\n%s", _1, _2, _3);break;
case 4:buffer = charf("%s\n%s\n%s\n%s", _1, _2, _3, _4);break;
case 5:buffer = charf("%s\n%s\n%s\n%s\n%s", _1, _2, _3, _4, _5);break;
case 6:buffer = charf("%s\n%s\n%s\n%s\n%s\n%s", _1, _2, _3, _4, _5, _6);break;
case 7:buffer = charf("%s\n%s\n%s\n%s\n%s\n%s\n%s", _1, _2, _3, _4, _5, _6, _7);break;
case 8:buffer = charf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", _1, _2, _3, _4, _5, _6, _7, _8);break;
case 9:buffer = charf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", _1, _2, _3, _4, _5, _6, _7, _8, _9);break;
case 10:buffer = charf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", _1, _2, _3, _4, _5, _6, _7, _8, _9, _10);break;
case 11:buffer = charf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11);break;
case 12:buffer = charf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12);break;
case 13:buffer = charf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13);break;
case 14:buffer = charf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14);break;
case 15:buffer = charf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15);break;
case 16:buffer = charf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16);break;
case 17:buffer = charf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17);break;
case 18:buffer = charf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18);break;
}
menu.max = option;
_q = 0;
elems[OPTIONS]->elem.text = LocalizedString(buffer),
clearOptions();
}
이 형식이 잘못 지정되어 있다는 것을 알고 있지만 여기에 입력 코드가 붙여진 곳을 붙여 넣었습니다. 여전히이 작업을 수행했습니다.
const char* charf(const char* optName, const char* optNum)
그러나 optNum 1 (18)의 인수로부터 아무것도에 사용되는, 그래서 내가 어떻게 할 것 : 어쨌든, 나는 같은 것을 사용해야 알아? (http://en.cppreference.com/w/cpp/language/parameter_pack에서) 다음과 같이
서명은 다음과 같아야합니다 :'const char * charf (const char * optName, ...);' –
woa, 당신은'C++ '프로그래머보다 더 많이 보입니다. 다양한 템플릿을 확인하십시오. – user1095108
난 그냥 문자열 스트림 또는 Boost.Format 같은 것을 사용하고 싶습니다. – chris