在本主题中,我们将学习如何将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模板。但由于Scalar参数没有出现在参数列表中,我发现很难在任何地方使用enable_if。由于参数包,我不能在参数列表和模板参数列表中添加伪参数。最后一个地方是返回类型,但正如我所说,我希望将其保持为自动。有什么想法吗?
答案 0 :(得分:0)
(旧问题,但为发现此问题的人回答。)
在模板参数列表的末尾添加带有基于std::enable_if
的默认参数的类型模板参数,并通过使用依赖于{的逗号表达式使默认参数依赖于推导的Args
{1}},即使您不关心Args
,然后在Args
上添加所需的任何测试:
Scalar
关键在于,要使SFINAE正常运行,默认模板参数必须依赖依赖于推导的模板参数,即使仅在其逗号不影响结果的逗号表达式中也是如此通过实际推导的模板参数。