使用通用 lambda 从字符串中提取具有特定类型的元素
Extracting element with specific type from string with generic lambda
我正在使用 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。我只想把这个逻辑封装在函数中。
通用 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>{});
...
由于是C++14,可以通过decltype(auto)
使用编译器类型推断:
int i = []() -> decltype(auto) {
return 1;
}();
我正在使用 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。我只想把这个逻辑封装在函数中。
通用 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>{});
...
由于是C++14,可以通过decltype(auto)
使用编译器类型推断:
int i = []() -> decltype(auto) {
return 1;
}();