2015-08-12 4 views
1

Возможно ли достичь такой функциональности, значение этого параметра будет по умолчанию значением другого параметра, если оно не указано?Установить значение параметра по умолчанию из другого значения параметра

Пример:

class Health 
{ 
public: 
    // If current is not specified, its value defaults to max's value 
    Health(int max, int current = max) : max_(max), current_(current) { } 
    int max_; 
    int current_; 
}; 

Как сейчас, я получаю ошибку компиляции:

error: 'max' was not declared in this scope 
Health(int max, int current = max) : max_(max), current_(current) { } 
          ^

ответ

8

Вы должны обеспечить перегрузки:

class Health 
{ 
public: 
    Health(int max, int current) : max_(max), current_(current) { } 

    Health(int max) : max_(max), current_(max) {} 
    // or `Health(int max) : Health(max, max) {}` since C++11 

    int max_; 
    int current_; 
}; 
0

Вы можете по умолчанию параметр к значению, которое не должно быть принято, а затем вы и затем проверяете с помощью оператора ? в инициализации ation

class Health 
{ 
public: 
    // If current is not specified, its value defaults to max's value 
    Health(int max, int current = 0) : max_(max), current_(current == 0 ? max : current) { } 
    int max_; 
    int current_; 
}; 
+3

Что делать, если 0 является допустимым значением тока? – Borgleader

+1

или используйте 'const int * current = nullptr' (или' optional '), но это кажется сложным. – Jarod42

+0

@ Jarod42 Указатель будет супер-уродливым для вызывающего («что вы имеете в виду, я не могу передать литерал ?!»), но «факультативно» - честная игра, я бы сказал. – Angew

Смежные вопросы