将函数调用分配给变量

Assigning a function call to a variable

本文关键字:变量 分配 函数调用      更新时间:2023-10-16

据我所知,

bool conditional = getTrueOrFalse();

将条件设置为代码中该行getTrueOrFalse()的确切位置。

我怎样才能做到每次使用变量conditional时,它都会调用getTrueOrFalse()(因为getTrueOrFalse()在整个程序的不同点在真和假之间切换(?我以后是否可以将conditional设置为不同的布尔返回函数?

您可以尝试函数指针。

#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 示例中,从技术上讲,您已经评估了该函数一次并将其分配给布尔conditional

如果你想在程序的稍后时刻进行评估,你必须通过函数指针再次显式或隐式调用该函数,就像我上面的代码片段一样。

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

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

  • 原始 C 样式函数指针 (lhs(
  • C++11 λ
  • 函子 : 带有运算符(( (RHS( 的类

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

RHS = 实施您的操作