首页 > 解决方案 > C++:模板和 Lambda

问题描述

在 C++ 中使用类似以下的内容是否常见?

template <typename T> function<void(vector<T> &)> filter1 = [ ] (vector<T> &vec){
    int count = 0;
    for (T t : vec){
        if ( t.cost < 500 )
            vec.erase(vec.begin()+count);
        count++;
    }
};

template <typename T> void discount(float p, vector<T> &vec){
    filter1<T>(vec);
    int count = 0;
    for (T t : vec) {
        t.cost = t.cost - t.cost * p;
        vec.erase(vec.begin() + count);
        vec.emplace(vec.begin() + count, t);
        count++;
    }

顺便说一句,我称它为 tembda,因为它是模板和 Lambda 的混合体。

标签: c++

解决方案


在 C++ 中使用类似以下的内容是否常见?

不。

首先,std::function这是一种重量级的抽象,在这种情况下会不必要地降低代码的性能。其次,与简单的模板函数相比,在这里使用 lambda 表达式没有任何优势——你只会让阅读你代码的人感到困惑。


推荐阅读