0

我正在使用 C++。我有可以包含以 开头^和结尾的元素的字符串$。该元素可以是intstring

例子:

"....^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,其中使用了这种提取。我只想将此逻辑封装在函数中。

4

2 回答 2

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>{});
...
于 2017-08-04T14:51:25.280 回答
-3

由于它是 C++14,因此您可以通过以下方式使用编译器类型推断decltype(auto)

int i = []() -> decltype(auto) {
    return 1;
}();
于 2017-08-04T15:13:32.653 回答