Functions with variable-length argument lists

BlitzMax Forums/BlitzMax Programming/Functions with variable-length argument lists

maverick69(Posted 2008) [#1]
Is it possible in BMax to create functions/methods with variable-lnegth argument lists.

Somthing like this in c++

#include <cstdarg>
#include <iostream>

using namespace std;

double average ( int num, ... )
{
  va_list arguments;                     // A place to store the list of arguments
  double sum = 0;

  va_start ( arguments, num );           // Initializing arguments to store all values after num
  for ( int x = 0; x < num; x++ )        // Loop until all numbers are added
    sum += va_arg ( arguments, double ); // Adds the next value in argument list to sum.
  va_end ( arguments );                  // Cleans up the list

  return sum / num;                      // Returns some number (typecast prevents truncation)
}
int main()
{
  cout<< average ( 3, 12.2, 22.3, 4.5 ) <<endl;
  cout<< average ( 5, 3.3, 2.2, 1.1, 5.5, 3.3 ) <<endl;
}




Brucey(Posted 2008) [#2]
No. Pass in a TList or Array, perhaps.


Perturbatio(Posted 2008) [#3]
or create a function with multiple default arguments:

function test(x:Int = null , y:Int = null , z:Int = null , t:Int = null)
	if X <> null print X
	if Y <> null print Y
	if Z <> null print Z
	if t <> null print t
end function

test(1)
test(1 , 2)
test(1 , 2 , 3)
test(1,2,3,4)


Not ideal of course


Brucey(Posted 2008) [#4]
Yuck :-)


Yan(Posted 2008) [#5]
I'd use an array, as Brucey suggested...
Strict

Print Mean([3!, 12.2!, 22.3!, 4.5!])
Print Mean([5!, 3.3!, 2.2!, 1.1!, 5.5!, 3.3!])

End


Function Mean!(num![])
  Local sum!
  
  For Local x = 0 Until num.Length
    sum! :+ num[x]
  Next
  
  Return sum! / num.Length
End Function



maverick69(Posted 2008) [#6]
thanks guys.

Using an Array is perfect for my needs ;)


Perturbatio(Posted 2008) [#7]
Yuck :-)


I never said it was a good way to do it :)