more elegant solution

G

Gernot Frisch

I have a struct, that has a lot of double variables. (only doubles,
assume). Now, each variable has a different "default" value, which is
set in Init function.

So, is there any better way of checking wheter mystruct.myvalue has
the default value set than this:


# # #
// a class for checking each member
struct SuperClass
{
virtual void Init() =0;

// that's the main thing
template <class T> bool IsStd(const T& type, const double* pD)
{
// create a new one and initialize with defaults
T t; t.Init();
// see if the double at the offset:
// &t + (pD-this) == *pD
return (*(double*) ((char*)&t + ((char*)pD - (char*)this)) == *pD);
}
};


// that's just a struct with members
struct test : public SuperWalls
{
test() {Init();}
void Init() {m_a=1; m_b=2; m_c=3;}


double m_a, m_b, m_c;
};


int main(int, char**)
{

test t;
t.m_c = 5;
// check for defualts
printf("%d, %d\n", t.IsStd(t, &t.m_b), t.IsStd(t, &t.m_c));

}
# # #


I wish I could just write:
t.IsStd(&t.m_b);
or even better:
IsStd(&t.m_b);

but without using a macro.


Thank you,


-Gernot
int main(int argc, char** argv) {printf
("%silto%c%cf%cgl%ssic%ccom%c", "ma", 58, 'g', 64, "ba", 46, 10);}

________________________________________
Looking for a good game? Do it yourself!
GLBasic - you can do
www.GLBasic.com
 
?

=?ISO-8859-1?Q?Ney_Andr=E9_de_Mello_Zunino?=

Gernot said:
I have a struct, that has a lot of double variables. (only doubles,
assume). Now, each variable has a different "default" value, which is
set in Init function.

So, is there any better way of checking wheter mystruct.myvalue has
the default value set than this:

Sure:

1) get rid of the /init()/ member function;
2) write a constructor for your class;
3) initialize its members with their default values in the
constructor's initialization list;
4) instantiate and use your objects feeling certain that their
members have all been initialized with their default values.

Pardon me case I have misunderstood your question, but this is the
simplest solution.

Regards,
 
G

Gernot Frisch

1) get rid of the /init()/ member function;
2) write a constructor for your class;
3) initialize its members with their default values in the
constructor's initialization list;
4) instantiate and use your objects feeling certain that their
members have all been initialized with their default values.

Pardon me case I have misunderstood your question, but this is the
simplest solution.


Sorry, my question was not clear.
I know about c'tor instead of init. OK. But I wanted a faster/better
way of writing:
t.IsStd(t, &t.m_c); without a macro.

So, basically:
t.IsStd(&t.m_c); // only

I used a Macro:
#define IS_STD(a,b) (a.IsStd(a, a.b) )

which works fine, but I'd lkie to know if there's any better way of
seeing, if t.m_c contains the default value, given by the init
function.

Is my question clear?
 

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

Similar Threads

explicit specialization od c'tor 11
reference to parent inherritance? 9
Fibonacci 0
unreachable code? 4
int(a) vs (int)a 19
date comparison 2
most accurate printf("%f") 14
What's a smart pointer? 7

Members online

Forum statistics

Threads
473,787
Messages
2,569,629
Members
45,332
Latest member
LeesaButts

Latest Threads

Top