0
根据cplusplus.com,std::transform
对一个(1)或两个(2)范围的元素顺序应用操作,并将结果存储在从结果开始的范围中。的std::transform
最后一个参数通常是一个函数,该函数在第一容器中的元素一些操作,但假设我有一个算符对象如下:std :: transform的最后一个参数
struct functor {
functor(int x) : x(x) {}
int operator()(int x1) {return x + x1;}
private :
int x;
}
然后,在位置的函数的,我可以还通过函子的情况下,像这样:
vector<int> v1, v2;
v1.push_back(1);
v1.push_back(2);
v2.resize(v1.size());
std::transform(v1.begin(), v1.end(), v2.begin(), functor(1));
我的问题是,如何编译器知道函数或传递给std::transform
功能的函数子类的实例?另外,如果一个实例被传递,那么在内部会发生什么,将该函数应用于第一个容器的元素?
您可能想看看[cppreference](http://en.cppreference.com/w/cpp/algorithm/transform)上介绍的示例实现,它是一个函数模板,它可以推导函子的类型。在语义分析阶段,编译器知道AST节点的类型,并将函数调用语法节点演化为适当的节点/动作(调用函数或调用函数调用操作符) –