为变量分配函数调用

时间:2013-09-23 23:45:31

标签: c++

根据我的理解,

bool conditional = getTrueOrFalse();

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

如何在每次使用变量conditional的情况下进行调整,它会调用getTrueOrFalse()(因为getTrueOrFalse()在整个程序的不同点上切换为true和false)?我以后能够将conditional设置为不同的布尔返回函数吗?

1 个答案:

答案 0 :(得分:4)

您可以尝试function pointers

#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&lt;&gt; conditional代替(就像在我的代码段中一样),每次使用括号运算符时都可以重新计算它。

仅供参考,还有很多其他方法可以完成同样的壮举:

  • 原始C风格函数指针(lhs)
  • C ++ 11 lambda(rhs)
  • 仿函数:带operator()(rhs)的类

lhs =左侧或存储地址的地方

rhs =您的操作的实施