Можно ли указать указатель функции Typedef на члена класса? - PullRequest
2 голосов
/ 13 декабря 2011

Я работаю с исполняемым файлом, который включает DLL. Для моего теста я объединил код в один исполняемый файл. Я работаю с Visual Studio 2008 и Boost 1.43. Я пытался исследовать это, но не нашел четкого ответа. Спасибо за помощь.

В моем main.h:

#include <string>

//These are normally defined in a seperate DLL
typedef std::string Typedef_func(const std::string & title);
void Register_My_Typedef(Typedef_func*);
//-------------------------------------------

class myClass
{
public:
    std::string func_one(const std::string & title);

    Typedef_func _test;

    void run();
};

В моем main.cpp:

#include "main.h"
#include <boost/bind.hpp>

std::string workingFunc(const std::string & title)
{
    return "";
}

int main(int argc, char* argv[])
{
    myclass* example;
    example->run();

    Register_My_Typedef(&workingFunc);//This works.

    return 0;
}

void myClass::run()
{
    //I want to point a Typedef_func* in a DLL to call myclass::func_one
    Typedef_func* tf = boost::bind(&myClass::func_one, this, "test"); //This does not.

    Register_My_Typedef(tf);
}

std::string myClass::funcOne(const std::string & title)
{
    return "";
}

void Register_My_Typedef(Typedef_func* passedIn)
{
    //Points the pointer in the DLL to passedIn
}

Логика DLL работает нормально, когда Register_My_Typedef вызывается для функции, не входящей в класс, но возможно ли ее вызвать из класса? Когда я пытаюсь скомпилировать этот код, он возвращает:

Когда я пытаюсь скомпилировать в Windows XP с VS2008, я получаю:

Ошибка C2440: «инициализация»: невозможно преобразовать из 'boost :: _ bi :: bind_t' в 'Typedef_func (__cdecl *)' с [ R = станд :: строка, F = повышение :: _ ммк :: MF1, L = повышение :: _ би :: List2, форсирует :: _ би :: значение> ]

Нет оператора преобразования, определенного пользователем, который мог бы выполнить это преобразование или оператор не может быть вызван.

1 Ответ

0 голосов
/ 09 июня 2013

Ответ заключается в том, что сам Typedef является членом класса для статической функции-члена и ведет себя не так, как нестатический, однако лучше всего работает с классом функции пользовательского класса main.

...