2013-06-14 4 views
4

그냥 "지연의 redaclaration"을 제공합니다. 이것을 변경하여 지연이 doSay(text)의 호출에 전달되지 않으면 지연은 1000이되어야하지만 doSay(text, 9000)으로 호출되면 지연은 9000이어야합니다.매개 변수가 전달되지 않으면 기본값을 사용하십시오

여기 제가 시도했지만, 작동하지 않았습니다.

uint32_t delay = MINTICKS; 
if (parameters > 1) { 
    delay = std::max(delay, popNumber(L)); 
} else { 
    uint32_t delay = 1000; 
} 

, 함수에 기본 매개 변수를 전달 함수 선언이 구문을 사용하려면

int PersonInterface::luaActionSay(lua_State* L) 
{ 
    //doSay(text, <optional> delay) 
    int32_t parameters = lua_gettop(L); 

    uint32_t delay = MINTICKS; 
    if (parameters > 1) { 
     delay = std::max(delay, popNumber(L)); 
    } 

    std::string msg(popString(L)); 

    ScriptEnviroment* env = getScriptEnv(); 

    Person* person = env->getPerson(); 
    if(person){ 
     person->doSay(msg, delay); 
    } 

    return 0; 
} 

답변

8

코드 :

void foo(int a, int b = 1000); 

foo(42);  // calls foo(42, 1000); 
foo(42, 9000); 

당신은 기본 매개 변수의 임의의 수를 가질 수 있지만, 기본 매개 변수의 오른쪽에 기본값이 아닌 매개 변수를 사용할 수 없으므로 허용되지 않습니다.

void foo(int a, int b = 1000, int c); 

그러나 이것은 단지 다시 delay를 선언하지 않는, 재 선언 오류로

void foo(int a, int b = 1000, int c = 42); 

입니다 :

} else { 
    delay = 1000; 
} 

또는

delay = (parameters > 1) ? 
     std::max(delay, popNumber(L)) : 
     1000; 
관련 문제