如何在C ++中修饰函数

时间:2014-11-20 19:41:41

标签: c++11 lambda python-decorators

我想实现以下

#include <iostream>
unsigned foo(int i) {return i;};
unsigned bar(unsigned(*p)()) {/*Do important work*/return p();};
int main(void){
    int integer = 42;
    auto lambda = [integer] () -> unsigned {return foo(integer);};
    unsigned number = bar(lambda);
    std::cout << number << std::endl;
}

也就是说,bar期望一个没有参数的函数指针并返回unsigned。我可以轻松编写一个包装器unsigned baz() {return foo(42);};并将其传递给bar(),但这有两个缺点

  • 它是一个单独的函数,而我更愿意构建内联包装器
  • 我必须为`integer。
  • 的每个期望值编写一个新的包装器

这个想法是bar()正在做一些工作,在调用函数的过程中,传递给它。我有一个合适的函数,但它有一个额外的参数。然而,在将函数传递给bar()时,这个额外的参数是已知的。

有没有办法解决这个问题,还是应该忘记这种方法并使用模板?我可以控制更改界面(例如将函数指针参数更改为std :: function).`

0 个答案:

没有答案