![](/img/trans.png)
[英]Specialize template member function with already-deduced template parameter
[英]Template on member function in lambda deduced using auto
在下面的代码中, events
是从模板策略构建的 stl 容器,其中底层类型由入站和出站中的类型组成。
auto events = process::run<inbound, outbound>(args);
处理完事件后,我需要根据运行时参数做一些计算。 下面是一个例子:
cool::transform(events.deltas(), [](const auto ¤t) { return current.method(); });
我们可能想要使用多种方法,即我们可能会调用另一个可能返回或可能不返回相同底层类型的方法。
cool::transform(events.deltas(), [](const auto ¤t) { return current.other(); });
有没有办法对此进行模板化,以便我可以声明:
cooler::transform<method>(events.deltas())
额外问题:如果方法实际存在于基础类型上,我们是否可以使用模板来仅启用代码?
有没有办法对此进行模板化,以便我可以声明:
不是真的 - 没有将“方法”作为模板参数传递的无障碍方式。 您将遇到重载/模板成员函数的问题。 您目前拥有的 lambda 解决方案是最好的解决方案 - 我建议将current
缩短为c
并使用auto&&
以减少样板:
cool::transform(events.deltas(), [](auto&& c){ return c.method(); });
如果方法实际存在于基础类型上,我们是否可以使用模板仅启用代码?
是的,您可以使用检测习语来检查表达式是否有效。 我写了一篇文章,涵盖了它和其他更强大/更简洁的技术: “使用 C++17 就地检查表达式有效性” 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.