C++ 使用变量参数"..."进行布尔测试

C++ Bool tests using Variable Arguments "..."

本文关键字:布尔 测试 参数 变量 C++      更新时间:2023-10-16

当使用变量参数列表"..."传递它们时,是否可以对多个对象进行Boolean测试?

示例函数:

    bool check_collision( SPRITE sprite, PLATFORM platform ...){
         //do check
         return true;
    }

调用:

    if(check_collision(sprite,platform,platform2,platform3,platform4,platform5)){
          //manipulate sprite
    }

而不是like:

    if((check_collision(sprite,platform)
        && (check_collision(sprite,platform2)
        && (check_collision(sprite,platform3)
        && (check_collision(sprite,platform4)
        && (check_collision(sprite,platform5)){
        //manipulate sprite
    }

或:

    if((check_collision(sprite,platform)
        || (check_collision(sprite,platform2)
        || (check_collision(sprite,platform3)
        || (check_collision(sprite,platform4)
        || (check_collision(sprite,platform5)){
        //manipulate sprite
    }

如果使用"..."测试它们,你是否需要迭代每个平台/比较每个平台的精灵?它们是否都必须返回true才能使布尔测试为真或只有一个?我猜你必须发送第三个Argument,所以函数知道bool是否会是ORAND ?(所以如果是或,只有一个必须为真,如果是与,所有必须为真?)

我已经在我目前正在做的程序中测试了它,但我还没有实现任何迭代,所以我很确定它只检查第一个platform

#include <stdarg.h>
double checkAll(int count, SPRITE sprite, ...)
{
    va_list ap;
    int j;
    boolean result = false;
    va_start(ap, sprite); //Requires the last fixed parameter (to get the address)
    for(j=0; j<count; ++j){
        result = result || checkCollision(sprite, va_arg(ap, PLATFORM)); 
    }
    va_end(ap);
    return result;
}