具有编译时间常量的模板化 Lambda 函数

Templated Lambda function with compile time constants

我在网上获得了这段代码 (split code),以一种非常酷的方式拆分字符串,但后来我想让它更通用和更易于管理。我已经实现了一个解决方法,通过输入参数将其作为带有 constexpr 的模板化 class 传递,但我想知道是否有人知道我如何使它工作。

我创建了一个接受一个编译时间常量的 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
splt_val.operator()<'\n'>("test");

是的,这个语法很糟糕。

template<char delimiter='\n'>
constexpr auto splt_val = [](std::string n)-> // ...

这为您提供了所需的语法。但这意味着每个模板参数都有一个不同的 splt_val 对象。

你可能会写:

splt_val['\n'_k]("test")

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