如何使自定义函数具有"func<type>"语法

How to make custom function has `func<type>` syntax

本文关键字:lt type 语法 gt func 何使 自定义函数      更新时间:2023-10-16

我尝试制作map,将向量中的所有std::string元素转换为const char *,这是我的代码:

template<typename T, typename T2, typename Func>
auto map(std::vector<T> v, Func f) {
    std::vector<T2> v2;
    for (T i: v) {
        v2.push_back(f(i));
    }
    return v2;
}

我想用map<const char*>(my_vector, [](std::string v){ v.c_str()}),如何实现<const char*>

通常,通过将要显式指定的参数作为第一个模板参数来实现:

template<typename T2, typename T, typename Func>
auto map(std::vector<T> v, Func f) {
    std::vector<T2> v2;
    for (T i: v) {
        v2.push_back(f(i));
    }
    return v2;
}

但是在这种情况下您必须小心,因为您正在传递std::string的副本。 你最终会得到一个vector<const char *>其中包含指向不再存在的字符串的指针。

相反,您需要传递一个引用:

template<typename T2, typename T, typename Func>
auto map(std::vector<T> &v, Func f) { // pass by reference here
    std::vector<T2> v2;
    for (T& i: v) { // take by reference here
        v2.push_back(f(i));
    }
    return v2;
}

并让您的 lambda 也引用:

[](std::string &v){ return v.c_str(); }