【发布时间】:2008-11-02 05:29:20
【问题描述】:
使用 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++ 标准禁止本地类作为函数对象
【问题讨论】:
-
有机会发布一个可以编译的示例吗?