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

Можно ли сделать так, чтобы вам не приходилось перегружать определение функции 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 параметр.

0

Решение

Используйте параметры по умолчанию для достижения этой цели. Что-то вроде:

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) {
...
}
7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]