7

Graph という C++ クラスがあり、アルゴリズム メソッド for_each_node() があります。次のように、テンプレートにすることもできます。

template <class UnaryFunction>
UnaryFunction Graph::for_each_node (UnaryFunction f)
{
     /* ... */
}

または、次のように std::function を使用します。

typedef std::function<void (Node&)> ForEachNodeFunc;

ForEachNodeFunc Graph::for_each_node (ForEachNodeFunc f)
{
     /* ... */
}

std::for_each などの標準アルゴリズムは最初のアプローチを使用しますが、gtkmm (GTK+ の C++ バインディング) などの一部のライブラリは、関数をそれらを含むオブジェクトの関数ポインターとして受け取ります。

各オプションの利点と欠点は何ですか? どちらを選択すればよいかわかりません。選択に影響を与えるもの: Graph クラスがクラス テンプレートかどうか、アルゴリズム メソッドで使用されると予想されるさまざまな関数の数、または速度要件。

4

1 に答える 1

5

Andy Prowl によるこの回答を見てください。これは、あなたの質問に対する回答でもあると思います。

一般に、選択を迫られるデザインの状況に直面している場合は、テンプレートを使用します...

https://stackoverflow.com/a/14678298/1758762 (std::関数とテンプレート)

于 2013-02-24T10:32:10.743 に答える