假设我有一个简单的函数,它接受一个条件,然后返回一些东西。
例如:
bool is_even(int num){
return (num % 2 == 0);
}
void Foo(conditional)
{
if(conditional)
std::cout << "Bar" << std::endl;
}
是否有可能在函数求值之前将参数或表达式作为一个整体获取到条件语句中?
所以我的意思是,如果条件是 is_even(2),我能否在计算之前得到表达式“is_even(2)”,而不是真实值 (True)?
最佳答案
一种方法是使用将 ()
运算符重载为 bool
的类:
struct Bar
{
bool operator()() const;
};
写
template <typename Y>
void Foo(const Y& y)
{
if(y()){
std::cout << "Bar" << std::endl;
}
}
然后您可以将任何状态封装到 Bar
中。如果您不喜欢在求值时需要编写 y()
这一事实,您可以通过定义 conversion 运算符来进一步调整语法 bool
而不是:
struct Bar
{
operator bool() const;
};
写
template <typename Y>
void Foo(const Y& y)
{
if (y){
std::cout << "Bar" << std::endl;
}
}
在这样做的过程中,您遇到了 actors,以及那美妙的 C++ 工程 Boost Spirit 的基础。参见 https://en.wikipedia.org/wiki/Actor_model和 https://theboostcpplibraries.com/boost.spirit
关于c++ - 当作为参数传递给函数时,是否可以在表达式被求值之前捕获表达式的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46003133/