假设以下策略类负责算法的一个方面:
struct VoidF { static void f() { ... // some code that has side effects } }; struct BoolF { static bool f() { bool res = ...; // some computation return res; } };
该BoolF
政策是"增强感知":当BoolF :: f()的返回true
,该算法可以退出.VoidF
是"增强 - 不知道",因此它返回void
(我不想强迫我的库的用户返回,bool
当它对他没有任何意义).
该算法目前编写如下:
templatestruct Algorithm { void run() { ... // some computation here if (std::is_same ::value) { if (F::f()) return; } else F::f(); // If F is VoidF, there should be no branching and some // compiler optimizations will be enabled ... // more computation, unless F::f() got rid of it } };
当然,如果用Algorithm
实例化,这不起作用VoidF
.有没有办法解决这个问题,Algorithm
因为评论中指出不应该有分支?