Re: Declaring a static const member of a class.
Luca Cerone wrote:
Thanks a lot to all of you.
I've received many inputs and I hope I'll be able to make
things work soon.
Creating the a public accessor, and a private member to set the
value seems a good idea.
Thanks a lot for the explanations,
the examples and the different solutions proposed!
Cheers, Luca
Meyer's singleton may fit your description better (to create x when you first
create QuadFun -- that is, not to initialize it at all if you do not create
them). For example:
class QuadFun{
public:
QuadFun(double a, double b) ; // a and b will be used to initialize
// the private vector y to evaluate the values (x-a)*(x-b)
// x has to be a vector that is shared among all the object of the class.
private:
static const std::vector<double> &GetX() {
static std::auto_ptr<const std::vector<double> >
x(InitializeXFromConfigFile());
return *x;
}
static std::vector<double> * InitializeXFromConfigFile(); // not shown
// this will be a vector of uniformly
//spaced numbers from 0 to 1. The number of points is determined
//by reading a configuration file. in this example I set the
//number manually in the main function.
std::vector<double> y;
}
QuadFun::QuadFun(double a, double b): y() {
const std::vector<double> &x = GetX();
unsigned n = x.size();
y.reserve(n);
for (unsigned i = 0; i < n; ++i)
y[i] = (x[i] - a) * (x[i] - b);
}
Disclaimers: I did not try to complile the above and Meyer's singletons "in
pure" are not "thread-safe".
HTH
-Pavel