我正在使用c ++。我有一个字符串,其中包含以^
开头的元素,以$
结尾。此元素可以是int
或string
。
示例:
"....^15$asdasd"-> 15
"...^bbbb$ccc"->"bbbb"
我想编写lambda函数来执行此操作。 如果我使用模板函数,代码将如下所示:
template <typename T>
T getElem(string S)
{
T retElem;
// make calculations
// ....
return retElem;
}
但是当我尝试使用通用lambda时,我遇到了这种情况:
auto getElem = [] () {
T retElem;
// make calculations
// ....
return retElem;
};
问题是如何获取retElem的类型。在这种情况下有没有办法使用lambda。我想在函数中使用泛型lambda,其中使用了这样的提取。我想将此逻辑仅封装在函数中。
答案 0 :(得分:2)
泛型lambda必须具有(模板化)类型的参数,你不能在非参数上模板化泛型lambda。解决问题的最简单方法是提供给定类型的伪参数。如:
template<class T>
struct identity { using type = T; };
...
auto lam = [](auto the_type) {
using T = typename decltype(the_type)::type;
...
};
...
lam(identity<T>{});
...
答案 1 :(得分:-3)
由于它是C ++ 14,您可以通过decltype(auto)
使用编译器类型推断:
int i = []() -> decltype(auto) {
return 1;
}();