给定一个可变参数模板参数包,我想检查给定的所有类型是否使用内联constexpr bool和
fold expressions是唯一的.我是这样的:
template<class... T> inline static constexpr bool is_unique = (... && (!is_one_of<T,...>));
其中is_one_of是一个正常工作的类似bool.
但是无论我将什么放入is_one_of,这一行都无法编译.甚至可以使用折叠表达式来完成,还是我需要为此目的使用常规结构?
解决方法
你的方法并不真正有效,因为需要使用类型T调用is_one_of,而不包括T的所有其余类型.没有办法在单个参数包中使用折叠表达式表达.我建议使用专业化:
template <typename...> inline constexpr auto is_unique = std::true_type{}; template <typename T,typename... Rest> inline constexpr auto is_unique<T,Rest...> = std::bool_constant< (!std::is_same_v<T,Rest> && ...) && is_unique<Rest...> >{};
用法:
static_assert(is_unique<>); static_assert(is_unique<int>); static_assert(is_unique<int,float,double>); static_assert(!is_unique<int,double,int>);
(感谢Barry的简化,使用折叠表达式.)
原文地址:https://www.jb51.cc/c/111584.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。