Storing variable arguments for future use in C++?

P

prasanthag

Hi,
I am a newbie to this group. I have a problem in handling the variable

arguments passed to a function. My requirement is like this.

I have 2 functions say,


void funcX(int i, int j);
void funcY(int i, int j,char *name);


Now I want to register this function some how and store the variable
arguments ( and store defualt values) for future use


RegisterFunc(funcX,10,20);
RegisterFunc(funcY,50,60,"MyName");


( Here I want to know how I can register and store the variable
arguments and function pointers, so that it can be used at a later
point to invoke the same)


Now at a later point I want to evoke these store functions in a
sequential order.


CallFuncs()
{
//Invoke funcX with values registered here;
//Invoke funcY with values registered here;



}


I was trying to use va_args with C and somehow i was not able to be
successful. If anybody have a better suggestion/design on how to do it,

please let me know.
 
A

Alf P. Steinbach

* (e-mail address removed):
Hi,
I am a newbie to this group. I have a problem in handling the variable

arguments passed to a function. My requirement is like this.

I have 2 functions say,


void funcX(int i, int j);
void funcY(int i, int j,char *name);


Now I want to register this function some how and store the variable
arguments ( and store defualt values) for future use


RegisterFunc(funcX,10,20);
RegisterFunc(funcY,50,60,"MyName");

Check out the boost facilities for functor objects.

Store them in a std::vector.
 
R

Rolf Magnus

Hi,
I am a newbie to this group. I have a problem in handling the variable

arguments passed to a function. My requirement is like this.

I have 2 functions say,


void funcX(int i, int j);
void funcY(int i, int j,char *name);


Now I want to register this function some how and store the variable
arguments ( and store defualt values) for future use


RegisterFunc(funcX,10,20);
RegisterFunc(funcY,50,60,"MyName");


( Here I want to know how I can register and store the variable
arguments and function pointers, so that it can be used at a later
point to invoke the same)


Now at a later point I want to evoke these store functions in a
sequential order.


CallFuncs()
{
//Invoke funcX with values registered here;
//Invoke funcY with values registered here;



}


I was trying to use va_args with C and somehow i was not able to be
successful.

Those cannot be used for what you want.
If anybody have a better suggestion/design on how to do it,
please let me know.

You could use function objects.

#include <iostream>
#include <vector>

class Func
{
public:
virtual void operator()() = 0;
};

class FuncX : public Func
{
public:
FuncX(int i, int j)
: i_(i), j_(j)
{}
void operator()()
{
std::cout << i_ << '+' << j_ << '=' << i_+j_ << '\n';
}
private:
int i_, j_;
};

class FuncY: public Func
{
public:
FuncY(int i, int j, const char* name)
: i_(i), j_(j), name_(name)
{
}
void operator()()
{
std::cout << name_ << '=' << i_ << '+' << j_ << '\n';
}
private:
int i_, j_;
const char* name_;
};

std::vector<Func*> funcs;

void RegisterFunc(Func* func)
{
funcs.push_back(func);
};

void CallFuncs()
{
for (std::vector<Func*>::iterator it = funcs.begin(), end = funcs.end();
it != end; ++it)
{
(**it)();
}
}

void CleanUp()
{
for (std::vector<Func*>::iterator it = funcs.begin(), end = funcs.end();
it != end; ++it)
{
delete *it;
}
funcs.clear();
}

int main()
{
RegisterFunc(new FuncX(10, 20));
RegisterFunc(new FuncY(50, 60, "MyName"));
CallFuncs();
CleanUp();
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,764
Messages
2,569,567
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top