【发布时间】:2017-04-01 21:13:44
【问题描述】:
在本主题中,我们学习如何将 SFINAE 与自动/自推返回类型一起使用: How do I use std::enable_if with a self-deducing return type?
但是,当我还使用可变参数模板时,我似乎无法应用任何技术。这是我的签名:
template<typename Scalar, class ClassDispatcher, typename... Args>
auto dispatch(Args&&... args) {}
我想专门研究使用 SFINAE 的标量模板。但是由于 Scalar 参数没有出现在参数列表中,我发现很难在任何地方使用 enable_if。而且由于参数包,我无法将虚拟参数添加到参数列表或模板参数列表中。最后一个地方是返回类型,但如前所述,我想将其保留为自动。有什么想法吗?
【问题讨论】:
-
将此函数转发给一个辅助函数,该函数接受一个虚拟的
Scalar指针(你总是可以传递nullptr),然后专门化那个。 -
“我无法将虚拟参数添加到...模板参数列表”这不是真的。
-
@T.C.那么请出示这个。如果我这样做:
template<typename Scalar, class ClassDispatcher, typename std::enable_if<std::is_same<Scalar, float>::value>::type, typename... Args>我收到关于无法推断“__formal”类型的错误 -
和@IgorTandetnik 这行得通,谢谢!不是最漂亮的解决方案,但我很高兴它没有改变界面——我只是把它塞进一个详细的命名空间中。
标签: c++ templates variadic-templates template-specialization sfinae