断言在代码中至少调用一次函数

时间:2016-07-04 08:17:20

标签: c++ assert

是否可以进行编译时断言,函数至少被调用一次出现

与执行函数的次数有关。

rvGridExplore = (RecyclerView) view.findViewById(R.id.rvGridExplore);
        final GridLayoutManager glm = new GridLayoutManager(context,2);
       // rvGridExplore.setNestedScrollingEnabled(false);
        rvGridExplore.setLayoutManager(glm);

       // final int visibleItemCount,totalCount,pastVisibleItems;
        rvGridExplore.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                Log.v("scrollll","state changed");
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                if (dy > 0) {
                    int totalCount = glm.getItemCount();
                    int visibleItemCount = glm.getChildCount();
                    int pastVisibleItems = glm.findFirstVisibleItemPosition();
                    if (loading) {
                        if ((visibleItemCount + pastVisibleItems) >= totalCount) {
                            Log.v("scroll","scrolled"+pastVisibleItems);
                        }
                    }

                }
            }
        });

用于调试目的。

修改

根据要求,我将提供更多信息,为什么我需要此功能。

我的游戏有很多子系统。 C就是其中之一。

我想确保我的游戏至少调用一次子系统中的某个功能(例如子弹系统更新子弹的位置)。

原因就在这里。

有时,当我想缩小可能发生错误的范围时,我通过在我的大系统(D)中注释掉这一行来禁用该功能: -

//C.h
class C{  //Callee
    void f();
};

//C.cpp
void C::f(){ //note: non static
    assert_called_at_least_once();  //<--- I expected something like this $$
    ............. some complex thing ......
}

//D.cpp
D::f2(){  //Caller
    C c;
    if(false){ 
    //^ This line is to emphasize that I don't care whether c.f() will be executed
        c.f(); //<--- if I comment out this line, an error should occur.
        //( Assume that it is only one occurrence of C::f(). )
    }
}

发现错误后,我有时会忘记重新启用它。

在某些情况下,如果我可以在函数内部插入断言行而不是设置断点,则会更容易。

EDIT2:
我更喜欢解释C ++功能的解决方案,而不是解决我的游戏特定示例的解决方案。

如果这样的解决方案根本不存在(由M.M和n.m.建议),请发帖作为答案,所以我很遗憾地接受它。

EDIT3:

bulletSystem->update();

或其他#似乎很有用。

但是,我要求解决方案 - $$ - 行被&lt; = 1行简单代码替换,因为更复杂=更多错误
- 不需要对来电者进行任何修改(D)

0 个答案:

没有答案