如果我有一个类Entity
,并且它具有名为entityGetter
的getter函数和setter函数entitySetter
我想将成员函数应用于Entity
参数化的value
对象,我会做类似的事情
Entity e;
std::invoke(&Entity::entitySetter, e, someValue);
这个想法等同于
e.entitySetter(someValue);
我想做的是制作一个函数,将其进一步概括为这样的东西
void addHelper ( int value
, Entity& e
, std::function<int (Entity&)> getFunc
, std::function<void (Entity&, int)> setFunc
) {
std::invoke(setFunc, e, getFunc_(value));
// getFunc_ returns an int. Just a wrapper around e.getFunc () * value
使用
调用时一个值
Entity
对象引用
包裹在lambda函数中的吸气剂函数getFunc
和
setter函数setFunc
也包装在lambda函数中
将在对象getFunc_
上调用e
,并使用该值在e
中进行设置。
问题是我没有足够的C ++经验来弄清楚为什么上面的示例不起作用。
答案 0 :(得分:0)
由于@NathanOliver的评论,我得以解决此问题。
这就是我以前尝试过的
void addHelper ( int value
, Entity& e
, std::function<int (Entity&)> getFunc
, std::function<void (Entity&)> setFunc
) {
std::invoke(setFunc, e, getFunc_(value));
// getFunc_ returns an int. Just a wrapper around e.getFunc () * value
参数
std::function<void (Entity&)> setFunc
仅接受Entity
对象引用。什么都没设置。
应该这样定义
std::function<void (Entity&, int)> setFunc
因此它需要一个对象以及一个值。