Re: Registering a data class with a handler class
Chris Jewell wrote:
I'm wondering what the best way of registering a data storage class
with a data handler class is.
Generally speaking there is no way in C++ to "register a class" (using
C++ definition of a "class") because a class is not an object and does
*not* really exist at run-time and registering usually a run-time
activity. If I misunderstood your intentions, sorry, and do tell.
What you usually do is register an *object* of a certain class. And in
that case the object is usually of a base polymorphic class to allow
overriding (or simply implementing) the proper functionality.
At the moment I have two classes:
class EpiCovars // Storage class
{
...
public:
// Public methods //
public:
EpiCovars();
~EpiCovars();
int init(const int, const char*, const char*);
double dist(const int&,const int&);
};
class EpiMath // The Handler class
{
private:
public:
EpiMath();
~EpiMath();
inline double beta_ij(const int&, const int&, const vector<double>&,
EpiCovars&);
Now, this seems strange. If you intend the function to be inline, you
need to provide its body. If you don't provide its body, don't try to
pretend by declaring it 'inline'. If you do provide its body here, there
is no need for the 'inline' keyword -- any function defined in the class
definition is 'inline'.
};
As you can see, at the moment, I pass a reference to the EpiCovars
class when I call EpiMath::beta_ij. However, the data in the
EpiCovars class does not change after it is initialized, so passing
the reference each time the handler method is called seems silly.
What I need to do is to register a reference to the EpiCovars class
when the EpiMath class is initialized. What is the best way to go
about this? I tried:
class EpiMath
{
private:
EpiCovars& myData;
public:
EpiMath(const EpiCovars& dataRef) {
myData = dataRef;
}
Two points: the argument has to be a ref to non-const EpiCovars and
you need to *initialise* 'myData', not try to *assign* to it:
EpiMath(EpiCovars& dataRef) : myData(dataRef) {}
};
but this definitely did not work. Any suggestions on what I should
do?
Read up on constructors, initialiser lists, references...
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask