C++ 是否可以在不重载的情况下为每个函数提供可变数量的参数?

C++ 是否可以在不重载的情况下为每个函数提供可变数量的参数?,c++,function,c++11,parameters,optional-parameters,C++,Function,C++11,Parameters,Optional Parameters,如果您希望能够向函数定义传递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, cl

如果您希望能够向函数定义传递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
}
编辑:实际使用说明:

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战斗。临时敌人用于战斗的类实例位于名为
敌方战场怪物[3]
的数组中,我在数组的每个实例中都有一个布尔值
isalive
,如果在
bossbattle()中调用参数,我希望将其设置为true

因此,例如,如果有3个参数传递到
bossbattle()
,则将有3个
isalive=true
,但如果只传递了1个参数,则只有1个参数设置为true。

使用默认参数来实现这一点。比如:

void foo(int arg, int arg2 = 0, int arg3 = 0) {
    ...
}
它允许您调用
foo
并向其传递1、2或3个参数


既然你提到了你的真实意图:即调用“
bossbattle(hades,biglion,biglion);
where-inside
bossbattle
它将传递给临时类用于战斗”

如果该
bossbattle
受到(我们称之为)战斗参与者数量的限制(即,将始终有1到3名参与者),那么您可以使用上述方法。否则,定义一个类来提取“哈迪斯”、“狮子”和“老虎”的共同点来定义基类可能更为合理,比如说
类生物
,并将接口改为使用生物容器:

void bossbattle(const std::vector<Creature>& battleParticipants) {
    ...
}
void bossbattle(const std::vector&battle){
...
}

具有默认参数的功能?请发布实际使用情况。根据零一多规则,一开始你不应该有“instance2”和“instance3”这样的东西。我相信有一个操作符类似于
。我在定义中看到了这一点,例如,
printf(char*format,…)
,但我根本没有研究过它。@Shade:这叫做a,但在这种情况下不起作用,除非可以使用
a
的值(或总是可以访问的其他变量)来确定传递了多少个参数。您需要的代码是“而不是“不编译。您可能认为这并不重要,但它会使您的问题荒谬,因为您似乎在问如何将类传递给函数,这在C++中是不可能的。如果您询问的是代码,请询问编译的代码。然后回答者就可以知道他们的答案确实取代了你的答案,而不是根据你可能认为最明智的想法进行猜测。我需要在函数定义中使用很多if语句吗?我正在寻找更精简的东西,比如-->(class a,$class b,$class c),这样编译器就知道可能没有传递参数,如果没有传递,也不用担心。-->$由条件运算符组成的。看看我为Kerrek SB maybe问题添加的真实示例?在阅读了所有提供的示例后,我得出结论,默认参数是最有效的方法。其他一切都不是我所需要的。谢谢@斯科特:我很高兴我帮了忙:)
void bossbattle(const std::vector<Creature>& battleParticipants) {
    ...
}