使用 STL 似乎需要的一件事是指定本地函数的方法。我通常提供的许多函数无法使用 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++ 中添加了一个 lambda。
与此同时,编译器是如何解决这个问题的?(尤其是 Windows 编译器。)
一个可能会澄清一点的更正。变更日志:11 月 2 日被替换以澄清由于 C++ 标准禁止将本地类作为函数对象