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 クラスがクラス テンプレートかどうか、アルゴリズム メソッドで使用されると予想されるさまざまな関数の数、または速度要件。