当前位置:  开发笔记 > 编程语言 > 正文

根据作为模板参数的函数的返回值避免分支

如何解决《根据作为模板参数的函数的返回值避免分支》经验,为你挑选了0个好方法。

假设以下策略类负责算法的一个方面:

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当它对他没有任何意义).

该算法目前编写如下:

template 
struct 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::run()因为评论中指出不应该有分支?

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有