gpt4 book ai didi

c++ - 接近 STL 算法、lambda、本地类和其他方法

转载 作者:搜寻专家 更新时间:2023-10-31 00:24:24 25 4
gpt4 key购买 nike

使用 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++ 标准禁止局部类作为函数对象

最佳答案

标准方式是一个“仿函数”——基本上,一个struct提供 operator()

例如:

struct MyMinFunctor {
bool operator()(const int& a, const int& b) { return a > b; }
};

vector<int> v;
sort(v.begin(), v.end(), MyMinFunctor());

因为它是一个结构/类,所以您可以子类化任何东西,例如“binary_operator”,并为更高级的仿函数维护状态。

关于c++ - 接近 STL 算法、lambda、本地类和其他方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/256557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com