2013-04-08 21 views
0

當使用變量參數列表"..."傳遞它們時,是否可以對多個對象執行Boolean測試?使用變量參數進行C++ Bool測試「...」

實施例功能:

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

調用等:

if(check_collision(sprite,platform,platform2,platform3,platform4,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 
    } 

或:

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是OR還是和AND? (所以,如果OR,只有一個人是真實的,如果和,都必須是真的嗎?)

我有我目前工作的程序中測試,但我還沒有實現 任何迭代如此我很確定它只檢查第一個platform

+0

可變參數只是一種接受未指定數量參數的方法,沒有明確聲明它們作爲函數簽名的一部分。其他一切(即你問的一切)完全取決於你。 – 2013-04-08 12:35:18

回答

2
#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; 
} 
+0

啊,這很酷。非常好的代碼。感謝您花時間寫下它。現在嘗試:D – Reanimation 2013-04-08 12:46:30