c – 使用enable_if检查参数包的类型

c – 使用enable_if检查参数包的类型,第1张

概述由于 allowed non-type variadic templates有一个限制,我试图用一个使用enable_if的方式编写一个任意数量的双精度函数.实质上,我想做一些像: template<typename... T, typename = typename std::enable_if<std::is_convertible<T, double>::value, T>::typ 由于 allowed non-type variadic templates有一个限制,我试图用一个使用enable_if的方式编写一个任意数量的双精度函数.实质上,我想做一些像:
template<typename... T,typename = typename std::enable_if<std::is_convertible<T,double>::value,T>::type>    foo(T... t){ /* code here */ }

我选择将enable_if作为未命名参数的默认值,因为我的函数实际上是一个构造函数,不会有一个返回值.这将适用于单个参数,但由于它是一个可变模板T是参数包,上述代码无效.那么,我如何检查每个参数是否可以转换成双倍?

解决方法 bool_pack的技巧又一次.
template<bool...> struct bool_pack;template<bool... bs> using all_true = std::is_same<bool_pack<bs...,true>,bool_pack<true,bs...>>;

然后

template<class R,class... Ts>using are_all_convertible = all_true<std::is_convertible<Ts,R>::value...>;

最后

template<typename... T,typename = typename enable_if<are_all_convertible<double,T...>::value>::type>foo(T... t){ /* code here */}
总结

以上是内存溢出为你收集整理的c – 使用enable_if检查参数包的类型全部内容,希望文章能够帮你解决c – 使用enable_if检查参数包的类型所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1258285.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存