如果未传递参数,则使用default

时间:2013-06-14 05:52:56

标签: c++

它只是让我“延迟了”。如何改变这一点,以便如果延迟没有传递给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;
}

1 个答案:

答案 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);

但这是

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

至于您的重新声明错误,请不要再次声明delay

} else {
  delay = 1000;
}

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