私は理解していない "R(F :: */mf /)"、Rは型の後、参照パラメータである必要がありますどのようなC++ 11コードの意味は以下のようなメンバ関数を使用して
template<typename F, typename R>
Fty make_adaptor(F fn, R (F::* /*mf*/)(const SemanticValues& sv) const)
{
return TypeAdaptor<R>(fn);
}
私は理解していない "R(F :: */mf /)"、Rは型の後、参照パラメータである必要がありますどのようなC++ 11コードの意味は以下のようなメンバ関数を使用して
template<typename F, typename R>
Fty make_adaptor(F fn, R (F::* /*mf*/)(const SemanticValues& sv) const)
{
return TypeAdaptor<R>(fn);
}
これは一部のタイプのpointer to member functionです。
多くの場合、std::function
をlambda expressionsと使用することをお勧めします。
メンバー関数へのポインタです。特に:
R (F::* mf)(const SemanticValues& sv) const
は
* mf
次のとおりです。(名前がコメントアウトされて)...F::
mf
という名前のポインタ:... F
のメンバ関数への...const SemanticValues& sv
:const参照を受け入れるSemanticValues
...R
:... R
...const
の値を返します。それ自体はconstです。'make_adaptor'メソッドのこの実装は2番目のパラメータを使用しないので、その名前はコメントアウトされました(警告を避けるため)。 – Swift
TypeAdaptorは構造体名で、TypeAdaptor
これは別の質問ですが、簡単に言えば、 'std :: function'は暗黙のテンプレート変換コンストラクタを持っています。これにより、正しいシグネチャを持つファンクタを自動的に' std :: function'に変換できます。それは[(5)このcppreferenceページで](http://en.cppreference.com/w/cpp/utility/functional/function/function)です。 typedefの 'Fty'は単なる略記であり、関連する型について何も変更しません。 – Thomas
これはC++ 11とは関係がありません。これは完全に有効なC++ 98コードです。 – PeterT