从共享对象调用外部类成员

时间:2012-01-03 18:32:37

标签: c++ c++11 pointer-to-member

经过大量阅读herehere后,我仍然无法使用我的代码。这是问题所在:

我有两个班,Fifo:

#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_WrapperProcess_Wrapper::function2)的成员函数调用此.so文件,并传递给.so指针 - this。所以,我假设共享对象将知道关于类Process_Wrapper的所有内容。

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

据我所知,我发布的问题描述可能不太明确,所以道歉。

谢谢大家。