2013-11-01 31 views
1
struct AAA { 
    char* myTraceProc(ClientData clientData, Tcl_Interp* interp, const char* name1, const char* name2, int flags) { 
     return NULL; 
    } 
}; 

int main(int argc, char* argv[]) { 
    Tcl_FindExecutable(argv[0]); 
    Tcl_Interp* interp = Tcl_CreateInterp(); 

    AAA obj; 
    boost::function<char*(ClientData, Tcl_Interp*, const char*, const char*, int)> f = boost::bind(&AAA::myTraceProc, &obj, _1, _2, _3, _4, _5); 

    Tcl_TraceVar(interp, "database", TCL_TRACE_WRITES, f, 0); 

    return 0; 
} 

在该代码中,我试图通过AAA::myTraceProcTcl_TraceVar其接受与所述相同的接口,因为它的函数指针,但我正在此错误成员函数。传递使用boost ::结合

error: cannot convert boost::function to char* ()(void, Tcl_Interp*, const char*, const char*, int) for argument 4 to int Tcl_TraceVar(Tcl_Interp*, const char*, int, char* ()(void, Tcl_Interp*, const char*, const char*, int), void*)

我觉得绑定部分有些问题。你能纠正它吗?

回答

3

该错误告诉你到底发生了什么问题:你不能将boost::function转换为普通函数指针。你必须写一个非成员函数并传递一个指针;如果您将指向该对象的指针作为客户端数据传递,它可以调用对象上的成员函数。

+0

谢谢。有效。第一次使用ClientData :) – Ashot

相关问题