【发布时间】:2012-08-09 22:14:40
【问题描述】:
你能用C++11的可变参数模板完成/* ??? */ in:
template<bool...v> struct var_and { static bool constexpr value = /* ??? */; };
这样var_and<v...>::value 在编译时通过布尔包v 提供&&?
你可以为struct var_or<v...> 为|| 做同样的事情吗?
您可以使用短路评估(在这两种情况下)吗?
编辑:the accepted answer 的更新添加了 C++17 fold expressions 启用
template<bool... v> constexpr bool var_and = (v && ...);
template<bool... v> constexpr bool var_or = (v || ...);
似乎,对于基于参数包的方法,只有有限类型的“短路评估”是可能的:在实例化 var_or<true,foo(),bar()> 时只调用一次 ||,它也同时调用 foo 和 @987654334 @。
【问题讨论】:
-
闻起来像家庭作业。
-
@mah:我真的怀疑现在有没有教 C++11 的地方。
-
这不是家庭作业。我正在写一个 zip 迭代器(Boost 是不够的);这个“宏”是根据布尔标志确定所有组件迭代器是否具有某个共同的属性。我确信有一种更清洁的方法。
-
在这种情况下,作为家庭作业分配看起来是个不错的问题;)
标签: c++ c++11 variadic-templates