gpt4 book ai didi

c++ - 将 C++ 成员函数指针传递给 STL 算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:53 26 4
gpt4 key购买 nike

我有一个成员函数如下:

class XYZ{
public:
float function(float x);
private:
float m_DensityMin;
float m_DensityMax;
};

现在,我正在尝试转换 std::vector<float> foo使用 std::transform STL算法通过传递成员函数function ,并将结果值存储在 vector 中 bar .

如果我将该函数用作全局函数,并使用应表示类成员变量的随机数据,它可以正常工作。

但是,作为函数需要使用成员变量m_DensityMinm_DensityMax类的,我需要将它用作成员函数。这是我试过的:

std::transform(foo.begin(), foo.end(), bar.begin(), &XYZ::function);

但我最终遇到了 VS2010 中的错误:

error C2065: term does not evaluate to a function taking 1 arguments

据我所知,我只传递了 1 个参数。任何指针?这是一个类似的 question ,我试过 std::mem_fun,因为 std::mem_fn 对我不可用,但无济于事。

最佳答案

std::mem_fun本身只为成员函数提供包装器,因此将在传递给其 operator() 的第一个参数的上下文中调用一个。话虽如此,你需要bind在将函数对象传递给 std::transform 之前 XYZ 的正确实例算法:

XYZ xyz;

std::transform(foo.begin(), foo.end(),
std::back_inserter(bar),
std::bind1st(std::mem_fun(&XYZ::function), &xyz));
// ~~~~~~^ ~~~~~~^ ~~~^

DEMO

关于c++ - 将 C++ 成员函数指针传递给 STL 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30354718/

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