在lambda表达式中使用外部函数

时间:2014-01-11 07:34:53

标签: c++ transform std

是否可以在lambda表达式中调用外部函数,如果没有,是否有其他方法可以使用transform和外部函数来执行此操作?

int half(int x) { return x / 2; }

int main() {
std::vector<int> test(5);
std::transform(test.begin(), test.end(), test.begin(), []() { return half(4); });
return 0; 
}

2 个答案:

答案 0 :(得分:3)

是的,it is definitely possible。事实上,您的代码唯一的问题是您的lambda应该接受int。使用该修补程序,您的代码compiles just fine

int half(int x) { return x / 2; }

int main() {
    std::vector<int> test(5);
    std::transform(test.begin(), test.end(), test.begin(), [](int) { return half(4); });
    //                                                        ^^^
    return 0; 
}

答案 1 :(得分:1)

正如杰弗弗所说,这是可能的,也是常见的。但是,std::transform将一元操作或二元操作作为其最终参数。你可能想要更像的东西:

static int half(int x) { return x / 2; }

int main() {
    std::vector<int> test(5);
    std::transform(test.begin(), test.end(), test.begin(), [](int value) {
        return half(value); 
    });
    return 0; 
}