2017-10-21 7 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)を渡すことが何を意味するのかを指摘することはできますか?

私は、ペアを使用して関数を呼び出そうとするとコンパイルエラー​​が発生するため、std::pair<int,int> fを引数として渡すのと同じではないと確信しています。

答えて

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

f両方unsigned型の2つのパラメータを、thakes及び未符号なし整数を返す関数へのポインタです。 stおよびhqidは完全に省略することができます。

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

は、あなたが(私はそれがためにそこconstの方法だと仮定)このようなfunctionを呼び出すことができます。

使用例:あなたは、例えば、このような機能を持っている場合

obj.function(foo); 
0

これは、別のものを返す2つの(符号なし)整数の関数を意味します。そのようなもののためのCの悪名高い構文を説明するためにtoolsがあります。

+0

私はペアで関数を呼び出そうとしているので、そうでないと確信しています。これはコンパイルエラーだけです。しかし、そのウェブサイトの多くのありがとう! – taper

+1

@taper彼の答えは最高の言葉を持っていないかもしれませんが、彼は正しいです。 – bolov

+1

@taperそれは単一の 'pair'ではなく個別に渡される2つの異なるパラメータです –

1

functionは、constクラスのメソッドです(constはnon-clには適用できません)。 1つのパラメータ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の2つの引数を受け取り、さらにunsignedを返します。

foo()が;

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

s次いでメンバ関数としてfunction()を持つクラスのインスタンスのような文である場合。

s.function(foo); 

は、関数foo()を呼び出します。 constfunction()の場合、オブジェクトsは論理的に変更されていないことを意味します。

関連する問題