【发布时间】:2021-12-14 21:31:01
【问题描述】:
我有两个类,一个是逻辑类,一个是模型类。初始化两者后,我想将b.funB()绑定到a.funA(),其中A a; B b;。
class A{
public:
bool funA() { doStuff(); }
}
class B{
public:
bool funB();
Template<class T>
void bindBtoA((bool (B::*fun2)(), bool (T::*fun1)(), T *t){
funB=std::bind( ?);
// (fun1, t), (&T::fun1, &t), (T::fun1, t), ... ?
}
}
如何正确绑定这些并摆脱“无法转换”错误(我在实际代码中确实使用了 typedef)
使用 lambda 的答案是可以接受的。但是,funB 必须是可调用的,因为另一个引擎需要获取此 (提示:Q_INVOKABLE),因此将 std::function 用于 A::funA 可能不适用于我的情况。
【问题讨论】:
-
不清楚你的问题中是否有错别字,所有这些都提到了 fun1、fun2、funA、funB。 例如不存在您的第一段所暗示的
A::fun1或B::fun1。请提供一个示例,说明您希望如何调用它以及您想要的结果行为。 -
我认为您使用的词不正确。您不会将两个函数绑定在一起,而是将参数绑定到一个函数。你试图做的事情非常不清楚,但不管它是什么,绑定它都不是。如果我不得不猜测,我会说
bindBtoA应该被称为setCallback而funB应该被称为invokeCallback。 -
感谢您的提醒,@paddy 显然,我一直使用函数的参数名称