Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > help with automatic code generation

Reply
Thread Tools

help with automatic code generation

 
 
JoshforRefugee
Guest
Posts: n/a
 
      01-31-2007
heard that we can do automatic code generation using macros, but not
sure how can I pursue this. Here is my problem.

In my env, I have class A,B and C. All of them has constructors, and
few common methods, like reset, and execute.

now my env(main) class actually is where I am creating this objects.
in .h
A myA;
B myB;
C myC;

and later I am calling methods in my .C file
myA.reset();
myB.reset();
myC.reset();
myA.execute();
.....
myC.execute();

now let say if I add Class D, I have to modify my env.h and env.C. And
I am trying to prevent that.
one way i was thinking of doing this, is to write macros:
so I can do:
REGISTER_OBJECT("A","myA");
REGISTER_RESET("A","myA",reset);
REGISTER_EXECUTE("A", "myA", execute)
.............

May be using macros might be one way to do this. I am really confuse
how I can I write this macros. Please guide me.

Thank you,

 
Reply With Quote
 
 
 
 
Ole Nielsby
Guest
Posts: n/a
 
      01-31-2007
JoshforRefugee <(E-Mail Removed)> wrote:

> heard that we can do automatic code generation using macros, but not
> sure how can I pursue this. Here is my problem.
>
> In my env, I have class A,B and C. All of them has constructors, and
> few common methods, like reset, and execute.


Don't bother with macros for things that can be done with simple
OO techniques. Your classes should probably derive from a base
class that declares the common methods as virtuals.


 
Reply With Quote
 
 
 
 
JoshforRefugee
Guest
Posts: n/a
 
      01-31-2007
problem is I own env class, and my group owns other classes. and I
don't want to be bother by creating class and registering its
function, every time someone adds new class or wants to create new
object for same class.

how can I do this?

 
Reply With Quote
 
Grizlyk
Guest
Posts: n/a
 
      01-31-2007
JoshforRefugee wrote:
>
> how can I do this?
>

What do you want - new names for single class? Or what?

--
Maksim A Polyanin


 
Reply With Quote
 
JoshforRefugee
Guest
Posts: n/a
 
      01-31-2007
just an interface for users so that they can register their classes
with my "main/env" class.

What I am doing, is collecting all classes out there, written by users
and constructing objects for them, and calling their methods (reset,
run). Users derived their class from base object class. Right now,
when someone adds new class, I have to open up "main/env" class and
create object for new class, and call common methods (reset, run) for
that new object.

My goal is to not manually touch "main/evn" class, everytime someone
creates new class. Let have some hooks that users can use so that they
can create these class and reset/run methods will be call for
them.

 
Reply With Quote
 
=?iso-8859-1?q?Erik_Wikstr=F6m?=
Guest
Posts: n/a
 
      02-01-2007
On Jan 31, 7:16 pm, "JoshforRefugee" <(E-Mail Removed)> wrote:
> just an interface for users so that they can register their classes
> with my "main/env" class.
>
> What I am doing, is collecting all classes out there, written by users
> and constructing objects for them, and calling their methods (reset,
> run). Users derived their class from base object class. Right now,
> when someone adds new class, I have to open up "main/env" class and
> create object for new class, and call common methods (reset, run) for
> that new object.
>
> My goal is to not manually touch "main/evn" class, everytime someone
> creates new class. Let have some hooks that users can use so that they
> can create these class and reset/run methods will be call for
> them.


Can't you do something like this:

class env {
std::vector<Base*> classes;
public:
void register(Base& b) {
classes.push_back(&b);
}
void resetAll() {
for (size_t i = 0; i < classes.size(); ++i)
classes[i]->reset();
}
};

I kind of assume here that you'll only have one instance of env (a
singleton comes to mind) but even if you don't you might be able to
use this approach. The idea is that the new classes registers
themselves with your env instance either when constructed or soon
after.

--
Erik Wikström

 
Reply With Quote
 
JoshforRefugee
Guest
Posts: n/a
 
      02-01-2007
that is good help. Thank you Erik.
that will take care of registering functions for new classes.
How about creating object for this class. Can I automate that?

so now in my top class, where I am doing

class top {
env myEnv;
A myA;
B myB;
C myC; //can I automate this creating
public:
void run() {
myEnv.resetAll();
myEnv.execute();
}

};

something like this in my classes will be very useful:

DECLARE (A, "myA");
DECLARE (A, "myAA");
class A {
.......

}

DECLARE(B, "myB");
class B {
....
}

so basically user has control how many objects to create.


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Automatic VHDL generation from C code fpga_designe VHDL 1 05-15-2009 04:16 PM
help with automatic code generation JoshforRefugee C++ 0 01-31-2007 05:34 AM
HTML Generation (Next Generation CGI) John W. Long Ruby 4 11-24-2003 04:24 AM
Re: Automatic Code Generation Rasmus Fogh Python 1 10-06-2003 08:03 PM
Automatic Code Generation Rasmus Fogh Python 0 10-05-2003 04:52 PM



Advertisments