如果你想在1到3个参数之间传递一个函数定义,你是否可以这样做,这样你就不必重载函数定义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()
)以通过boss战来填充战斗系统。临时敌人用于战斗的类实例位于名为Enemy battlefield monsters[3]
的数组中,并且在数组的每个实例中都有一个布尔isalive
,如果调用参数,我希望将其设置为true bossbattle()
因此,例如,如果有3个参数传递到isalive = true
,则会有3个bossbattle()
,但如果只传递1个参数,则只有1个设置为true。
答案 0 :(得分:7)
使用默认参数来实现此目的。类似的东西:
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) {
...
}