将方法作为参数发送到另一个类

时间:2015-10-28 13:16:37

标签: c++ c++11

我真的不知道怎么搜索这个,所以我会在这里问这个问题。 我知道如何将函数作为参数传递,但这一次,情况有点不同,我有点迷失。

出于可读性的原因,我会简化课程,但如果我错过了一些令人困惑的内容,请告诉我。

我有一个类调用另一个函数:

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的每个类传递函数。这可以通过当前配置完成,还是可以建议另一种方法来解决这个问题?

干杯

1 个答案:

答案 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");
}