C ++创建一个类似于while,if或for的函数

时间:2017-04-11 20:58:28

标签: c++ function lambda

在C / C ++中考虑这段代码:

bool cond = true;
while(cond){
    std::cout << "cond is currently true!";
}

是否可以创建一个可以这样调用的函数?

myFunction(some_parameters_here){
    //Code to execute, maybe use it for callbacks
    myOtherFunction();
    anotherFunction();
}

我知道你可以使用函数指针和lambda函数,但我想知道你是否可以。我很确定有办法这样做,因为while()会如何存在?

2 个答案:

答案 0 :(得分:3)

while(condition) { expression }不是一个函数,而是一个控制结构/一个单独的语言结构;只要expression评估为condition(即true),它就会一次又一次地执行!= 0

相反,

形式的函数定义只有在被另一个函数调用时才会执行。

希望它有所帮助;

答案 1 :(得分:3)

警告:此解决方案无法保证您的代码审核人员会喜欢它。

我们可以使用类似于Alexandrescu用于SCOPE_EXIT macro的那种技巧(非常棒的一小时会议,这一点是在18:00)。

它的要点:一个聪明的宏和一个被肢解的lambda。

namespace myFunction_detail {
    struct Header {
        // Data from the construct's header
    };

    template <class F>
    void operator * (Header &&header, F &&body) {
        // Do something with the header and the body
    }
}

#define myPrefix_myFunction(a, b, c) \
    myFunction_detail::Header{a, b, c} * [&]

使用如下:

myPrefix_myFunction(foo, bar, baz) {

}; // Yes, we need the semicolon because the whole thing is a single statement :/

...在宏扩展后重建一个完整的lambda,并进入myFunction_detail::operator*并进入foobarbaz以及构造体。