3

据我了解,

bool conditional = getTrueOrFalse();

getTrueOrFalse()将根据代码中该确切行的内容设置条件。

每次使用该变量时,我如何才能conditional将其调用getTrueOrFalse()getTrueOrFalse()在整个程序的不同点在真假之间切换)?我以后可以设置conditional为不同的布尔返回函数吗?

4

1 回答 1

4

你可以试试函数指针

#include <functional>

std::function<bool()> conditional = &getTrueOrFalse;  // no evaluation yet

if ( conditional() )     // actual evaluation
{

} else {

}
conditional = &isSunShining;  // no evaluation yet: just point to something else

OP 不清楚,因为您没有考虑功能评估。你必须问自己,我什么时候真正想要评估函数? 当您使用括号时,您实际上是在评估函数或函数指针。在您的 OP 示例中,从技术上讲,您已经对该函数进行了一次评估并将其分配给 boolean conditional

如果您希望稍后在程序中进行评估,则必须通过函数指针(如我上面的片段)再次显式或隐式调用该函数。

另请注意,布尔值conditional只是一个简单的内存位置,具有真/假的二进制表示 - 它不知道在 read 上刷新我的值。但是,如果您改用 std::function<> conditional(就像在我的片段中一样),您可以在每次使用括号运算符时重新评估它。

仅供参考,还有许多其他方法可以完成基本相同的壮举:

  • 原始 C 风格函数指针 (lhs)
  • C++11 拉姆达 (rhs)
  • 函子:带有 operator() 的类 (rhs)

lhs = 左侧或存储地址的位置

rhs = 执行您的操作

于 2013-09-23T23:52:05.393 回答