【发布时间】:2013-10-19 23:32:52
【问题描述】:
如果您希望能够向其中传递 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())来填充与老板战斗的战斗系统。临时敌人用于战斗的类实例位于名为 Enemy battlefield monsters[3] 的数组中,如果在 bossbattle() 中调用参数,我希望在数组的每个实例中将其设置为 true 的布尔值 isalive
例如,如果有 3 个参数传递给 bossbattle(),则将有 3 个 isalive = true,但如果只传递 1 个参数,则只有 1 个设置为 true。
【问题讨论】:
-
带默认参数的函数?
-
请发一个真实的使用情况。根据零对多规则,你一开始就不应该有像“instance2”和“instance3”这样的东西。
-
看看像 printf 这样的函数是如何工作的。我相信有一个类似于
...的运算符。我已经在定义中看到了这个,即。printf(char *format, ...),但我根本没有调查过。 -
@Shade:这被称为variadic function,但在这种情况下这不起作用,除非
a的值(或其他始终可访问的变量)可用于确定有多少参数已通过。 -
您想要“代替”代码的代码无法编译。您可能认为这并不重要,但它使您的问题变得荒谬,因为您似乎在询问如何将类传递给函数,这在 C++ 中是不可能的。如果您要询问代码,请询问可编译的代码。然后,回答者可以知道他们的回答确实取代了你所拥有的,而不是根据你可能的意思最有可能的合理想法进行猜测。
标签: c++ function c++11 parameters optional-parameters