你可以使用 C++11 可变参数模板来完成/* ??? */
:
template<bool...v> struct var_and { static bool constexpr value = /* ??? */; };
这样就在编译时var_and<v...>::value
提供&&
了布尔包?v
你可以为struct var_or<v...>
for做同样的事情||
吗?
您可以使用短路评估(在这两种情况下)吗?
template<bool... v> constexpr bool var_and = (v && ...);
template<bool... v> constexpr bool var_or = (v || ...);
似乎,对于基于参数包的方法,只有一种受限类型的“短路评估”是可能的:虽然var_or<true,foo(),bar()>
只实例化一次调用||
,但它也同时调用foo
和bar
。