【发布时间】:2019-03-17 04:35:03
【问题描述】:
我在网上获得了这段代码 (split code),以一种非常酷的方式拆分字符串,但我想让它更通用和易于管理。我已经实现了一种解决方法,通过输入参数将其作为带有 constexpr 的模板类传递,但我想知道是否有人知道我如何使这项工作。
我创建了一个接受一个编译时间常数的 lambda 函数,我正在尝试调用它。在调用站点,它会将模板参数误认为是一个试图执行小于运算符的表达式。
auto splt_val = []<char delimiter='\n'>(std::string s)->std::vector<std::string>{
std::istringstream iss(s);
std::vector<std::string> parm_data(
(std::istream_iterator<WordDelimitedBy< delimiter > >(iss)),
std::istream_iterator<WordDelimitedBy< delimiter > >());
return parm_data;
};
splt_val<'\n'>("test"); //<-- DOESN'T WORK
splt_val("test"); //<-- THIS WORKS
【问题讨论】:
-
以前没见过。这是 GCC 扩展吗?是 ISO C++ 还是提议的?
-
应该在规范中; -std=C++14 是我使用的编译旋钮。
-
看起来它可能是在 C++20 中出现的,而不是在当前的 VS 2017 中,它最终是相当兼容的。 en.cppreference.com/w/cpp/language/lambda
标签: c++ templates lambda c++20