2016-05-07 19 views
1

ここにコードスニペットがあります。関数の引数で空ポインタとキャスト

class NetworkRequestChannel { 
public: 
    ... 

    NetworkRequestChannel(const unsigned short _port_number, 
    void * (*connection_handler) (int *)); 
    ... 
private: 
    ... 
} 

質問はvoid * (*connection_handler) (int *)です。私はそれを読む方法をあいまいに考えています。それは、connection_handlerという名前のオブジェクトへのvoidポインタとして、intポインタにキャストされています。しかし、私はそれがほぼ間違っていることを知っています、そして、それをどのように解釈するかわかりません。

+5

これは関数ポインターであり、単一の 'int *'を引数とし、void *の値(汎用メモリーアドレス)を返す関数を受け入れます。パラメータ自体の名前は 'connection_handler'です。 – mukunda

+0

'class NetworkRequestChannel'は、これがCではなくC++であることを示しています。答えは同じですが、表示されているコードは有効ではありません。 –

+0

これは私がしばらく混乱しているものです。私は、これはクラスのためのもので、私はあまりにも多くの細部を入れないようにしていて、簡単な答えを得ようとしていたことを認めます。しかし、私の教授の任務のすべてにおいて、彼のファイルは '.C'と' .H'拡張子を持つCフ​​ァイルです。しかし、彼は自分の定義ファイルでもクラスを使用しています。与えられたmakefileは 'g ++ -g'を使います。これは私がこのクラスまで見たことがないようにしようとしているC/C++ハイブリッドのようなものです。 – UnworthyToast

答えて

1

引数

void * (*connection_handler) (int *) 

これは、関数ポインタの構文の型int*の一つの引数を取り、void*

0

を返す関数へのポインタです。問題のパラメータは、単一のint*を引数として受け取り、void*の値(汎用メモリアドレス)を返す関数を受け入れます。

詳しくはhereをご覧ください。

(それはかなり古い記事だ、と私はコメントや近代的なC++実践を重視するものを一覧表示するには、この答えを編集するために人々を奨励しています。私は、リンク先の記事がベストプラクティスと最新の状態に実際にある場合は、これを無視してください!)

関連する問題