c – 使用enable_if检查参数包的类型
发布时间:2020-12-16 03:45:27 所属栏目:百科 来源:网络整理
导读:由于 allowed non-type variadic templates有一个限制,我试图用一个使用enable_if的方式编写一个任意数量的双精度函数.实质上,我想做一些像: templatetypename... T,typename = typename std::enable_ifstd::is_convertibleT,double::value,T::type foo(T..
由于
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 */} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |