我真的不知道怎么搜索这个,所以我会在这里问这个问题。 我知道如何将函数作为参数传递,但这一次,情况有点不同,我有点迷失。
出于可读性的原因,我会简化课程,但如果我错过了一些令人困惑的内容,请告诉我。
我有一个类调用另一个函数:
class Class1 : public ofBaseApp {
public:
void setup() {
class2.bindMethod(&Class1::thatFunction);
}
void thatFunction(Signature signature) {}
Class2 class2;
}
然后是Class2:
#include "js_delegate.h"
class Class2 {
public:
void bindMethod(void (ofBaseApp::*func)(Signature signature)) {
JSDelegate(this, func);
}
}
和JSDelegate的定义:
template < class X, class Y >
FastDelegate2(Y *pthis, DesiredRetType (X::* function_to_bind)(Param1 p1) ) {
m_Closure.bindmemfunc(detail::implicit_cast<X*>(pthis), function_to_bind); }
如果我想这样做,我在Class1中收到错误,指出ofApp::*
与ofBaseApp::*
不兼容。
我想使bindMethod
通用,所以我可以从继承自ofBaseApp的每个类传递函数。这可以通过当前配置完成,还是可以建议另一种方法来解决这个问题?
干杯
答案 0 :(得分:0)
所以根据评论:
var dt_due= document.getElementById("duedate").value=a.four;
var dt_ret=today;
应该根据需要为您服务。 有关如何使用see here或使用以下示例代码:
template <class class_type,class function_type>
void bind_base_method(function_type function, base& instance) {
static_assert(std::is_base_of<base,class_type>::value || std::is_same<base,class_type>::value, "class_type is not derived of base or base");
static_assert(std::is_member_function_pointer<function_type>::value, "Function is not a member function");
}