是否可以进行编译时断言,函数至少被调用一次出现?
不与执行函数的次数有关。
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)