我正在使用C++,我需要知道标量值(例如a double
)是否"已定义".如果需要,我还需要能够"取消"它:
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; }
在C++中有可能吗?
谢谢
正如其他答案所说,C++没有这个概念.你可以轻松解决它.
你可以有一个未定义的值,你在构造函数中初始化bar,通常是-1.0或类似的东西.
如果您知道calculate_bar永远不会返回负值,则可以将未定义函数实现为检查<0.0.
一个更通用的解决方案是让bool说明是否定义了bar在构造函数中初始化为false,并且在第一次设置时将其更改为true.boost :: optional以优雅的模板方式执行此操作.
这就是你所拥有的代码示例.
class Foo { public: double get_bar(); Foo() : barDefined(false) {} private: double bar; bool barDefined; void calculate_bar() { bar = something(); } }; double Foo::get_bar() { if ( barDefined == false ) { calculate_bar(); barDefined = true; } return bar; }
正如其他人所指出的,没有什么比"未定义"的状态更好.但你可能想看看boost.optional