2017-10-21 75 views
1

我是新來的C++,並試圖將一個C++程序翻譯成python。我感到困惑的下面代碼的語法:功能定義中的配對變量

void function(unsigned(*f)(unsigned st, unsigned hqid)) const{ 
    if(f(st,hiddenControlBitId)){ 
    // code here 
    } 
} 

任何人都可以指出哪些是通過傳遞unsigned(*f)(unsigned st, unsigned hqid)作爲參數是什麼意思?

BTW,我肯定是不一樣通過一對std::pair<int,int> f作爲參數,因爲試圖調用使用一對函數給出一個編譯錯誤​​。

回答

3
unsigned(*f)(unsigned st, unsigned hqid) 

這裏f是一個指針,指向thakes 2個參數的函數,無論是無符號類型的,並返回未無符號整數。 sthqid可以完全省略。

用法示例:

如果你有這樣的功能,例如:

unsigned foo(unsigned a, unsigned b) 
{ 
    return a + b; 
} 

,那麼你可以調用function這樣的(我想這是因爲const存在的一種方法):

obj.function(foo); 
0

這意味着返回另一個的兩個(無符號)整數的函數。有tools來解釋C的這種臭名昭着的語法。

+0

我確信它不是這種情況,因爲我試圖用一個對來調用函數,這隻會引發一個編譯錯誤。但非常感謝那個網站! – taper

+1

@taper他的答案可能沒有最好的措辭,但他是對的。 – bolov

+1

@taper它是單獨傳遞的兩個不同的參數,而不是作爲單個「對」 –

1

function是一個類的方法constconst不能應用於非CL屁股功能),它將一個參數f作爲輸入。

f是一個指向非類函數的指針,它以2 unsigned參數作爲輸入並返回unsigned

例如:

unsigned addThem(unsigned st, unsigned hqid) 
{ 
    return st + hqid; 
} 

someObj.function(&addThem); 
1
void function(unsigned(*f)(unsigned st, unsigned hqid)) const{ 
    if(f(st,hiddenControlBitId)){ 
    // code here 
    } 
} 

在此,function()是一些類接受單個參數,它是一個指向函數(名爲f)的成員函數,它接受類型爲unsigned的兩個參數,並返回unsigned

如果foo()是定義爲的函數;

unsigned foo(unsigned x, unsigned y) 
{ 
     return x + y; // some arbitrary operation on the arguments 
} 

並且如果s是具有function()作爲成員函數,然後像一語句的類的一個實例;

s.function(foo); 

會調用函數foo()function()規範中的const意味着對象s不在邏輯上更改。