如何使自定义函数具有"func<type>"语法
How to make custom function has `func<type>` syntax
我尝试制作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(); }
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 在 QVector<std::unique_ptr 上使用 std::find<Type>>
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- 控制到达非空函数clang(-Wreturn-type)的末尾
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- 将系数存储在头文件的数组中("does not name a type"错误)
- 尝试打开 ifstream 时出现"Incomplete type"错误
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 在"结构提升::enable_if<提升::is_pod<T>,无效>"中没有名为"type"的类型
- "Missing type specifier - int assumed"无法通过向主函数添加"return 0"来解决
- OpenCV CV_16F type
- C++ "错误:在'类 std::result_of< ... >"中没有名为'type'的类型"
- 将内存分配返回值强制转换为 TYPE 数组
- C++ 一个lambda浅拷贝const Type&如果它被赋予一个命名捕获,如[copy=val](){}?
- reference_wrapper导致"incomplete type is not allowed"