STL を使用する上で必要と思われることの 1 つは、ローカル関数を指定する方法です。私が通常提供する関数の多くは、STL 関数オブジェクト作成ツール ( bind など) を使用して作成することはできません。関数オブジェクトを手動で作成する必要があります。
C++ 標準では、テンプレートのインスタンス化でローカル型を引数として使用することを禁止しているため、私が使用できた最善の方法は、小さなライブラリを作成することでした (関連する部分を表示するだけです)。
// library header
class MyFunctionBase<R,T>
{
public:
virtual ~MyFunctionBase();
virtual R operator()(const T &) const=0;
};
class MyFunction<R,T>
{
MyFunctionBase<R,T> *b;
public:
~MyFunction()
{
delete b;
}
virtual R operator()(const T &) const
{
return (*b)(T);
}
};
// source file
....
class func: public MyFunctionBase ...
std::stl_alg(.... MyFunction(new funct));
これはいつも私には扱いにくいように思えました。ISO委員会の人々もそう信じて、C++にラムダを追加したと思います。
それまでの間、コンパイラはこの問題にどのように対処したのでしょうか? (特に Windows コンパイラ。)
少し明確になるかもしれない修正。変更ログ: 明確にするために 11 月 2 日を置き換え C++ 標準ではローカル クラスを関数オブジェクトとして禁止しているため