2017-09-01 42 views
0

比方说,我有一个简单的函数,它接受一个条件,然后返回一些东西。当它作为参数传递给函数时,是否有可能捕获表达式的内容?

例如为:

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)吗?

+0

你用C或C++编程? – Bathsheba

+2

号顺便说一句,'返回NUM%2 == 0;' – juanchopanza

+0

@Bathsheba我清除它为C++,对不起。由于C风格的宏是捕获这种可能的方式,因此我只包含C语言。 – Fields

回答

6

一种方法是使用一类重载()操作员在bool

struct Bar 
{ 
    bool operator()() const; 
}; 

,写

template <typename Y> 
void Foo(const Y& y) 
{ 
    if(y()){ 
     std::cout << "Bar" << std::endl; 
    } 
} 

然后,您可以封装任何状态进入Bar。如果你不喜欢,你需要在评估的分写y()的事实,你可能会进一步调整的语法定义一个转换运营商bool代替:

struct Bar 
{ 
    operator bool() const; 
}; 

,写

template <typename Y> 
void Foo(const Y& y) 
{ 
    if (y){ 
     std::cout << "Bar" << std::endl; 
    } 
} 

在这一过程中,你是在演员,那美妙的一件C++工程升压精神的基础绊脚石。见https://en.wikipedia.org/wiki/Actor_modelhttps://theboostcpplibraries.com/boost.spirit

相关问题