I'm working in C++ and I need to know if a scalar value (for instance a double
) is "defined" or not. I also need to be able to "undef" it if needed:
class Foo {
public:
double get_bar();
private:
double bar;
void calculate_bar() {
bar = something();
}
};
double Foo::get_bar() {
if ( undefined(bar) )
calculate_bar();
return bar;
}
Is it possible in C++?
Thanks
As the other answers says, C++ doesn't have this concept. You can easily work around it though.
Either you can have an undefined value which you initialize bar to in the constructor, typically -1.0 or something similar.
If you know that calculate_bar never returns negative values you can implement the undefined function as a check for < 0.0.
A more general solution is having a bool saying whether bar is defined yet that you initialized to false in the constructor and when you first set it you change it to true. boost::optional does this in an elegant templated way.
This is what the code example you have would look like.
You must do it by using an extra boolean.
To implement using an extra boolean, you could try logic like the following template:
You could try the Construct on first use idiom and write
get_bar()
this way:When you call
get_bar()
it will makebar
for you if no one has asked for it yet. Any subsequent calls will just returnbar
. As the linked page says, this doesn't technically leak memory because the OS will reclaim it when the program exits.UPDATE:
Changed the return value to
double &
to allow you to modifybar
.