как конвертировать указатель из функции класса

0

Я использую визуальную студию 2012 профессионала, у меня есть журнал классов:

class log
{
   //some code
   private:
       int check();
};

и в другом классе у меня есть указатель на функцию, подобную этой в конструкторе:

class fun

{
     //some code
public:
    fun(int (*wsk)());
}

и когда я пытаюсь отправить функцию проверки из журнала классов в конструктор fun, я получаю ошибку:

typedef int (*fwsk)();
fwsk gwsk = check;
fwsk gwsk = (void *)check;

Как заставить его работать?

  • 0
    В чем ошибка?
  • 0
    ошибка C3867: 'log :: check': отсутствует вызов аргумента при вызове функции; используйте '& log :: check', чтобы создать указатель на член
Показать ещё 4 комментария
Теги:
type-conversion
visual-studio-2012

1 ответ

0

Функции - члены принимают невидимый первый аргумент this

поэтому int log::check - это указатель на функцию типа:

typedef int (log::*function_pointer_type)(void);

К сожалению, это никогда не будет тем же типом, что и

typedef int (*fwsk)(void);

Вы можете использовать std::bind в С++ 11, чтобы обойти это и передать общую функцию.

Пример:

typedef std::function<void(int)> fwsk;

class Log
{
public:
   int check(){}
};

class fun
{
   //some code
   public:
      fun(const fwsk& wsk){}
};


int main(int argc, char** argv)
{
  Log l;

  fun f(std::bind(&Log::check,&l));
}
  • 0
    ты можешь написать пример?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню