C++ 带编译时常量的模板化Lambda函数

C++ 带编译时常量的模板化Lambda函数,c++,templates,lambda,c++20,C++,Templates,Lambda,C++20,我在线获得了这段代码(),以一种非常酷的方式拆分字符串,但我想让它更通用、更易于管理。我已经用constexpr实现了一个通过输入参数将其作为模板类传入的变通方法,但是我想知道是否有人知道我如何才能做到这一点 我创建了一个lambda函数,它接受一个编译时常量,我正在尝试调用它。在调用站点,它将模板参数误认为是试图执行小于运算符的表达式 auto splt_val = []<char delimiter='\n'>(std::string s)->std::vector<

我在线获得了这段代码(),以一种非常酷的方式拆分字符串,但我想让它更通用、更易于管理。我已经用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
auto splt\u val=[](std::string s)->std::vector{
标准:istringstream iss;
std::向量parm_数据(
(std::istream_迭代器>(iss)),
std::istream_迭代器>());
返回parm_数据;
};
splt_val(“测试”)//
在这里我们写了一个适配器,但这会很尴尬


在这里我们编写了一个适配器,但这会很尴尬。

工作起来很有魅力!谢谢你,工作很有魅力!谢谢,我以前没看过这个。这是GCC扩展吗?是否在ISO C++中或提出?应该在规范中;std=C++14是我使用的编译旋钮。看起来它可能在C++20中出现,而不是在当前VS 2017中,这最终是合理的complient。我以前没见过这个。这是GCC扩展吗?是否在ISO C++中或提出?应该在规范中;std=C++14是我使用的编译旋钮。看起来它可能在C++20中出现,而不是在当前VS 2017中,这最终是合理的complient。
splt_val.operator()<'\n'>("test");
template<char delimiter='\n'>
constexpr auto splt_val = [](std::string n)-> // ...
splt_val['\n'_k]("test")