【发布时间】:2018-04-28 20:42:21
【问题描述】:
我在标准库 (source) 中看到了 std::disjunction 的实现:
template<class...> struct disjunction : std::false_type { };
template<class B1> struct disjunction<B1> : B1 { };
template<class B1, class... Bn>
struct disjunction<B1, Bn...>
: std::conditional_t<bool(B1::value), B1, disjunction<Bn...>> { };
我很好奇需要将disjunction<B1> 专业化为B1。为什么它比我幼稚的实现更好?
template<class...> struct or_t
: std::false_type {};
template<class B1, class... Bn> struct or_t<B1, Bn...>
: std::integral_constant<bool, bool(B1::value) || bool(or_t<Bn...>::value)> {};
【问题讨论】:
-
请注意
std::disjunction短路。 -
@Zereges 这可能是一个答案;)
-
这肯定不是标准库实现...
标签: c++ c++17 standard-library