1

经过大量阅读herehere后,我仍然无法让我的代码正常工作。这是问题所在:

我有两个班级,先进先出:

#ifdef __cplusplus
 extern "C" {
 #endif 

class Fifo
{
public:

   Fifo(int len);
   ~Fifo();

   void  AddTokens(void* buffer, unsigned len);

private:

   // some variables here

};

#ifdef __cplusplus
 }
 #endif 

和另一个类 Process_Wrapper:

#ifdef __cplusplus
 extern "C" {
 #endif 


class Process_Wrapper
{
    public:
        Process_Wrapper(const std::string process_name);
        Fifo* GetOutputPortIDtoFifoMap(int portID);
        virtual ~Process_Wrapper();
    protected:
private:
    //some variables here
};

#ifdef __cplusplus
 }
 #endif 

成员函数Process_Wrapper::GetOutputPortIDtoFifoMap返回一个指向类的初始化对象的指针Fifo

现在,我有一个共享对象 (.so),它使用类头文件编译FifoProcess_Wrapper包含在内。也就是说,.so 文件知道这些类的接口。

Process_Wrapper我从( )的成员函数调用这个 .so 文件Process_Wrapper::function2并将指针传递给 .so - this。所以,我假设共享对象会知道关于类的一切Process_Wrapper

在 .so 文件中,我试图调用成员函数Process_Wrapper::GetOutputPortIDtoFifoMap,这显然不起作用。所以,我尝试了:

Fifo* (Process_Wrapper::*GetFifoMapping)(int) = p1->wptr->GetOutputPortIDtoFifoMap; 

where正确p1->wptr返回指向Process_Wrapper对象的指针。

我在这里迷路了。我对这个概念很陌生,这些例子并没有直接回答这个问题。我该怎么做呢?

另外,由于我使用的是 C++0x/C++11,任何人都可以告诉我(最好)使用 std::bind 或 mem__fun_ref 的解决方案吗?

编辑:好的,我想我可以完善我的问题:我有一个 classMyclass和一个 object myobject,它是这个类的一个实例。Myclass有一个成员函数,接受一些参数,并返回一个类型的指针PTRTYPE。如何提取Myclass要传递给另一个函数的成员函数,以便它可以用作普通的指向函数的指针。或者,具体来说:如何从指向成员函数的绑定指针中提取函数指针?

4

1 回答 1

1

为了回答我自己的问题,我将“this”指针传递给 .so 对象。但是,在运行时,我收到有关未找到符号的错误。这个符号是“U”或在 .so 文件中未映射,但在将加载此 .so 的主 exe (“T”) 中定义。我所要做的就是将“-rdynamic”添加到生成主 exe 的链接器选项中。

显然,我没有看到问题这么简单,我的(不正确的)假设是问题与正确使用指向初始化对象的成员函数的指针有关。

我了解我发布的问题描述可能不清楚,因此对此深表歉意。

感谢大家。

于 2012-01-04T13:00:02.720 回答