C++传入任意的函数类型作为参数

C++编程中,有些时候需要传入函数作为参数,这在STL中作为谓词经常用到。传入的可以是函数、函数对象和lambda表达式。编程的时候,把它当成一个模板类型传入即可。以下给出一个简单的例子:

#include <iostream>
#include <utility>
#include <functional>

template<typename F>
void foo(F f) {
    auto&& res = f();
    std::cout << res << std::endl;
}

int f1(int n) {
    return 2 * n;
}

bool f2() {
    return 0.1;
}

struct Obj {
    int operator()(int a, int b) {
        return a + b;
    }
};

int main() {
    foo(std::bind(&f1, 10));  // 一元参数
    foo(std::bind(&f2));       // 无参数函数
    int x = 10;
    foo([&]() { return x; }); // lambda表达式
    Obj obj;
    foo(std::bind(obj, 1, 2)); // 函数对象
    return 0;
}

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
c语言中的宏函数是一种宏定义的形式,可以在编译预处理阶段通过替换来实现类似函数调用的功能。它不同于普通的函数调用,其主要特点是在宏定义时使用一些特殊的宏形参,这些宏形参可以包含可变参数。 可变参数是指宏函数在调用时可以传入不定数量的参数。在宏定义中,我们可以使用"..."来表示可变参数,且该参数必须放置在宏参数列表的最后。 通过宏定义中的可变参数,我们可以通过宏函数实现一些功能较为复杂的操作。比如,我们可以编写一个求和的宏函数,可以传入任意数量的参数,并对它们进行求和计算。例如: ``` #define SUM(...) sum(__VA_ARGS__) int sum(int count, ...) { int result = 0; va_list arg; va_start(arg, count); for(int i = 0; i < count; i++) { result += va_arg(arg, int); } va_end(arg); return result; } ``` 在使用可变参数的宏函数时,我们需要使用宏定义中的特殊宏形参,包括`va_list`、`va_start`、`va_arg`和`va_end`。`va_list`是一个用于存储可变参数类型,`va_start`用于初始化可变参数的访问,`va_arg`用于按顺序获取可变参数的值,`va_end`用于结束对可变参数的访问。 总之,宏函数和可变参数是C语言中非常有用的功能,可以通过它们来实现一些复杂的操作和功能。但需要注意的是,在使用可变参数时要小心,保证参数的正确性和合法性,以免出现错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值