Можно ли сделать так, чтобы вам не приходилось перегружать определение функции 3 раза, если вы хотите иметь возможность передавать от 1 до 3 параметров в нее?
Например вместо:
function(class a) { //this is called if only 1 class is passed
instance 1 = a;
}
function(class a, class b) { //this is called if 2 classes are passed
instance1 = a;
instance2 = b;
}
function(class a, class b, class c) { //this is called if 3 classes are passed
instance1 = a;
instance2 = b;
instance3 = c;
}
Вы могли бы иметь:
function(class a, <if2class>class b, <if3class>class c) //this is called
//for all passes
// <ifxclass> is not a real command, I'm using it for demonstration
{
instance1 = a; //always
instance2 = b; //if class b is passed
instance3 = c; //if class c is passed
}
Для вызова функции …
function(first, second) //example of a function call with this code
РЕДАКТИРОВАТЬ: объяснение для реального использования:
bossbattle(biglion, bigtiger);
bossbattle(biglion);
bossbattle(hades, biglion, biglion);
//where inside bossbattle it sets the classes passed in to temporary classes
//for battle. that's why I need a variable number of parameters
Я уже создал боевую систему для обычных врагов, и она вызывает функцию случайного заполнения 1-3 мест на основе процентного соотношения случайных нормальных врагов. Я пытаюсь использовать ту же боевую систему, но с другой функцией (т.е. boss battle()
) заселить боевую систему боссом. Экземпляры класса, которые временные враги используют для битвы, находятся в массиве с именем Enemy battlefield monsters[3]
и у меня есть логическое значение isalive
в каждом экземпляре массива, который я хочу установить в значение true, если параметры вызываются в bossbattle()
Так, например, будет 3 isalive = true
если 3 параметра переданы в bossbattle()
но только 1 установлен в true, если передан только 1 параметр.
Используйте параметры по умолчанию для достижения этой цели. Что-то вроде:
void foo(int arg, int arg2 = 0, int arg3 = 0) {
...
}
который позволяет вам звонить foo
и передать ему 1, 2 или 3 аргумента.
Так как вы упомянули свои настоящие намерения: то есть позвонитеbossbattle(hades, biglion, biglion);
где внутри bossbattle
это устанавливает классы, переданные во временные классы для битвы «.
В случае, если это bossbattle
ограничено количеством (давайте назовем это) участников сражения (то есть всегда будет от 1 до 3 участников), тогда вы можете использовать вышеупомянутый подход. В противном случае было бы более разумно определить класс, который извлекает все, что общего между «hades», «lion» и «tiger», для определения базового класса, скажем, class Creature
и измените интерфейс, чтобы вместо него взять контейнер существ:
void bossbattle(const std::vector<Creature>& battleParticipants) {
...
}
Других решений пока нет …