c++ - 当作为参数传递给函数时,是否可以在表达式被求值之前捕获表达式的内容?

标签 c++

假设我有一个简单的函数,它接受一个条件,然后返回一些东西。

例如:

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_modelhttps://theboostcpplibraries.com/boost.spirit

关于c++ - 当作为参数传递给函数时,是否可以在表达式被求值之前捕获表达式的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46003133/

相关文章:

c++ - 下面的 c++ 线程代码会导致嵌入式系统上的进程崩溃吗?

没有新的 C++ 对象

c++ - c++的执行顺序

c++ - 我无法使图像中的透明度起作用

c++ - 函数 'Summation' 的参数太少

c++ - 用opencv放大图像像素

c++ - 验证C中数组的大小

c++ - C++ 中的详细文件 IO 错误报告

c++ - 带引用的 std::tuple 无法在 clang 中编译,但不能在 gcc 中编译

在子类中未检测到 C++ 纯虚函数