2011-10-27 10 views
5

私はここでいくつかの質問をブラウズしてきましたが、テンプレート化されたオブジェクトの型パラメータとしてvoid型としてキャストされた整数を渡したサンプルコードが見つかりました。ここで私が何を意味するかの例です:C++のテンプレート型パラメータについて

SomeRandomObject<void(int)> Object; 

誰かが「無効(int型)」のコードの一部とそれがありませんを説明することができれば、私はそれをお願い申し上げます。

答えて

7

このタイプは「intを受け取り、voidを返す関数」です。

+0

お手伝いありがとう。 –

2

タイプは関数タイプです。あなたはそれにその型の変数や参照を宣言することはできませんから、自分自身だけで種類を持っています

typedef int (ft)(void); // Huh? (raw function type) 
typedef ft *fp;   // ??? (pointer to function) 

typedef int (*fp_oldstyle)(void); // Ahh... (same as fp) 

機能を、しかし:あなたは今までそれが唯一のポインタ型で使用されているので、それにそれほど馴染みがないかもしれませんあなたが典型的に使用するものはポインタです。ポインタは最後の行のよく知られた構文で宣言されています。いずれの関数でもint foo(void);の場合は、foo&fooの両方がポインタとして解釈されるため、 "生の"関数タイプftは必要ありません。

しかし、std::function,std::bind、lambdasの新しいテンプレートマジックでは、テンプレートパラメータで裸関数の型を見るのがはるかに一般的なことです。

+0

関数参照を持つことは可能です。 – AraK

+0

@AraK:ああ、それは本当です:ft&f = foo; f();ありがとう!しかし、あまり使われていないようです。私は、参照が再割り当てできないことを考慮していると思います。 –

+0

私は同意する、私はまれにそれを見た。私の関連する質問:http://stackoverflow.com/questions/1516958/could-someone-please-explain-the-difference-between-a-reference-and-a-pointer – AraK

関連する問題