在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()会如何存在?
答案 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*
并进入foo
,bar
,baz
以及构造体。