6

私は自分のプロジェクトでしばらく使用boost::signals2しています。残念なことに、それらが内部でどのように実装されているかはまだわかりません。私の問題は、信号の定義そのものからすでに始まっています。のような定義はどのように

boost::signals2::signal< void (bool, double) > 

扱い?実装の詳細から、署名が適切な名前のテンプレート パラメーターになることがわかりますSignature。ただし、構文がわかりません。この構文は C++ 標準で許可されていますか? シグナルがこの形式で提供されている場合、シグナルは関数シグネチャをどのように「保存」できますか?

すでにソースを調べてみましたが、この構文の説明を見つけることができませんでした。どんな助けでも大歓迎です。

4

2 に答える 2

2

はい、この構文は許可されています。それが示す型は、 andを取り、を返すbooldoublevoid関数への参照です。もしそうならtypedef、名前が真ん中に座ってしまうので、扱いにくいでしょう:

typedef void Signature(bool, double);

新しいエイリアス構文を使用すると、少し読みやすくなります。

using Signature = void(bool, double);

関数へのポインターとの類似点は次のとおりです。

typedef void (*Pointer)(bool, double);

using Pointer = void (*)(bool, double);

その後、さまざまな要素を分解するためのテンプレートのトリックがあります (戻り値の型と各引数の型を抽出します)。

于 2013-05-15T07:44:39.733 に答える