【发布时间】:2017-10-10 05:54:44
【问题描述】:
这是我试图实现的目标:
class MyClass
{
public:
using Callback = void(MyClass::*)(uint8_t idx);
void forEach(Callback callback);
private:
int m_buf[64];
int m_x;
int m_y;
MyObject m_object;
}
void MyClass::forEach(Callback callback)
{
size_t s = m_object.size();
for(size_t i = 0; i < s; i++)
callback(i);
}
void MyClass::f1()
{
forEach([this](uint8_t idx)
{
m_buf[idx]++;
});
}
void MyClass::f2()
{
forEach([this](uint8_t idx)
{
m_buf[idx] = m_x + m_y * idx;
});
}
所以有很多方法可以修改m_buf[]。为了避免复制和粘贴'get size + for loop',我想添加一个forEach 方法并将lambdas 作为回调传递。
this 被捕获以访问班级成员。
实现相同结果的正确方法是什么?
谢谢。
PS:这个例子的编译返回错误'cannot convert ::lambda ....'
回答: 有了“路人”的回答,我完成了代码:
// Class declaration in header
using Callback = std::function<void(uint8_t)>;
void forEach(Callback callback);
// forEach() is as above
// forEach() call looks like
forEach([this](uint8_t idx) {
m_buf[idx] = m_x + m_y * idx;
});
我还发现了一些可能有用的相关问题答案
Passing lambda as function pointer - “5gon12eder”答案。
C++ lambda with captures as a function pointer
【问题讨论】:
-
请让您的问题标题描述问题,而不仅仅是列出内容
-
此外,这个问题还不清楚。您发布的代码不起作用吗?如果不是,以什么方式?而你想做什么呢? (我们无法从不做那件事的代码中推断出这一点)
-
请包含实际错误消息。它们不是胡言乱语,而是有用的信息,截断它们也无济于事。
标签: c++ lambda function-pointers member-function-pointers