[c++]. Unspecified number of arguments

okunek

Ситуация.
Есть функция (назовем ее fff которая юзает некую другую функцию func, причем я сам пока не знаю, что будет внутри func и какие параметры ей передавать. Более того, понадобится несколько реализаций func... Заранее известно, что у func точно есть два параметра, а наличие (количество и тип) других зависят от ее реализации. Я тут настрочил кое-какой код, который как оказалось (ну и это довольно очевидно) неправильный.
 
#include <stdarg.h>

typedef float(*fxyfloat , float ,...);

float func(float x, float y, float a, float b)
{
return x+y+a+b;
}

float fff(fxy fn,...)
{
// <баловство>
va_list ap;
va_start(ap,fn);

float res=fn(0.,0.,ap);

va_end(ap);
return res;
// </баловство>
}

int main
{
ffffxy)&func,1.,2.);
}

понятно, что в этом коде в func передается адрес переменной в стеке, а не те параметры, которые я задал в main-е. В общем, как правильно объяснить компилятору, чтобы все доп. аргументы fff передавались в func?
Посмотрел в страуструпе, ничего подобного не увидел...
ЗЫ. если что-то хреново описал, могу описать более детально...

Marinavo_0507

C++ - это в некотором роде объектно-ориентированный язык.
Передавай объект параметром, хуле.

Dasar

передавай вместо функции - объект, или ботай что такое mem_fun-ы

okunek

какой объект?
не, если у меня будет несколько функций:
func1(float x, float y, int a, float b)
func2(float x, float y, float b)
func3(float x, float y, short a, int b)
че тогда делать? несколько вариантов fff не канает...

Julie16


class A
{
public:
virtual ~A throw
{
}

virtual float operator = 0;
};

class YourFunc: public A
{
public:
YourFunc( float a, float b, float c ):
d_a( a
d_b( b
d_c( c )
{
}

virtual ~YourFunc throw
{
}

virtual float operator
{
//do good things with d_a, d_b, d_c :)
return d_a + d_b + d_c;
}

private:
float d_a;
float d_b;
float d_c;
};

float func( A& func_obj )
{
return func_obj;
}

int main
{
YourFunc param( 1, 2, 3 );
func( param );
}

okunek

хы, круто.
спасибо
Оставить комментарий
Имя или ник:
Комментарий: