使用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++标准禁止将本地类用作函数对象
最佳答案
Boost.Bind,Boost.Function和Boost.Lambda是您的 friend 。