После многотысячного чтения here и here, я все еще не могу заставить мой код работать. Вот проблема:Вызов внешних участников из общего объекта
У меня есть два класса, 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), который скомпилирован с заголовками для классов Fifo
и Process_Wrapper
. То есть файл .so знает интерфейсы к этим классам.
Я называю это .so файлом от функции-члена от Process_Wrapper
(Process_Wrapper::function2
) и перейдите к .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?
Edit: Хорошо, я думаю, что могу уточнить мой вопрос: У меня есть класс Myclass
и объект myobject
, который является экземпляром этого класса. Myclass
имеет функцию-член, принимает некоторые аргументы и возвращает указатель типа PTRTYPE
. Как извлечь функцию-член из Myclass
для передачи другой функции, чтобы ее можно было использовать как обычный указатель на функцию. Или, в частности: Как извлечь указатель функции из привязанного указателя на функцию-член?
Вы просто хотите передать указатель метода, вот и все? – Geoffroy
Где вы изучали C++? – StackedCrooked
«Как извлечь указатель функции из привязанного указателя на функцию-член?» Вы не можете. –