Форум программистов, компьютерный форум CyberForum.ru

Передача в функцию метод класса - C++

Восстановить пароль Регистрация
 
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
19.01.2013, 21:22     Передача в функцию метод класса #1
Не получается передать в функцию метод класса...
C++
1
2
3
    
        hge->System_SetState(HGE_FRAMEFUNC,&GameManager::UpdateScene);
    hge->System_SetState(HGE_RENDERFUNC,&GameManager::RenderScene);
Выпадает ошибка:
Кликните здесь для просмотра всего текста
e:\source\visualstudio2008\project\phenomen\phenomen\source\c_gamemanager.cpp(18) : error C2664: 'void HGE::System_SetState(hgeBoolState,bool)' : cannot convert parameter 1 from 'hgeFuncState' to 'hgeBoolState'
Conversion to enumeration type requires an explicit cast (static_cast, C-style cast or function-style cast)


Добавлено через 1 минуту
C++
1
2
    bool GameManager::UpdateScene();
    bool GameManager::RenderScene();
Не передается !

C++
1
2
bool FrameFunc()
bool RenderFunc()
Передается !
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
19.01.2013, 21:35     Передача в функцию метод класса #2
потому что указатель на свободную функцию и указатель на метод класса - это разные указатели.
тут даже касты не помогут. оно скомпилится, но при попытке вызвать метод - все будет плохо.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
19.01.2013, 21:38     Передача в функцию метод класса #3
boost::bind или std::bind
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
19.01.2013, 21:55  [ТС]     Передача в функцию метод класса #4
Цитата Сообщение от I.M. Посмотреть сообщение
boost::bind или std::bind
Нашел английскую документацию начинаю читать, но я в технической литературе не настолько силен своими словами можешь подсказать что она делает, я так понял что-то вроде макроса с привязкой параметров функций?
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
19.01.2013, 22:06     Передача в функцию метод класса #5
Работа методов класса зависит от состояния объекта. Без объекта они не имеют смысла.
Можно передавать в качестве параметра функции статические методы класса.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
19.01.2013, 22:08     Передача в функцию метод класса #6
бинды не помогут если нет возможности изменить сигнатуру функции, которая принимает указатель на свободную функцию.
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
19.01.2013, 22:18  [ТС]     Передача в функцию метод класса #7
Цитата Сообщение от DU Посмотреть сообщение
бинды не помогут если нет возможности изменить сигнатуру функции, которая принимает указатель на свободную функцию.
Цитата Сообщение от lemegeton Посмотреть сообщение
Работа методов класса зависит от состояния объекта. Без объекта они не имеют смысла.
Можно передавать в качестве параметра функции статические методы класса.
Два отличных совета !

Но,
Цитата Сообщение от I.M. Посмотреть сообщение
boost::bind или std::bind
- и меня уже начал волновать не вопрос передачи как таковой, а то что я бинды не знаю... Всем спасибо за помощь !

Добавлено через 4 минуты
Да, действительно статические можно передавать !!!
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
19.01.2013, 22:27     Передача в функцию метод класса #8
бинды позволяют создать функтор для последующего его вызова. Не обязательно сразу привязывать туда какие-то значения параметров, но можно и привязать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <functional>
 
void test(const std::function<bool (int)>& i_functor)
{
   if (!i_functor)
      return;
      
   if (i_functor(42))
      std::cout << "42 is true!" << std::endl;
   else
      std::cout << "42 is false..." << std::endl;
}
 
class Foo
{
public:
   bool test1(int a)
   {
      std::cout << "Foo::test1" << std::endl;
      return a > 0;
   }
   
   bool test2(int a, int b)
   {
      std::cout << "Foo::test2" << std::endl;
      return a > b;
   }
   
   static bool test3(int a)
   {
      std::cout << "Foo::test3" << std::endl;
      return a == 42;
   }
};
 
int main()
{
   Foo foo;
   test(std::bind(&Foo::test1, foo, std::placeholders::_1));
   test(std::bind(&Foo::test2, foo, std::placeholders::_1, 144));
   test(std::bind(&Foo::test3, std::placeholders::_1));
   return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2013, 22:37     Передача в функцию метод класса
Еще ссылки по теме:

передача массива классов в метод класса C++
C++ Передача переменных из функции в метод класса
Передача define в метод класса C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
19.01.2013, 22:37     Передача в функцию метод класса #9
а теперь заменим
C++
1
2
3
4
void test(const std::function<bool (int)>& i_functor)
на
typedef bool (*FunPtr)(int);
void test(FunPtr fun);
будет работать?
Yandex
Объявления
19.01.2013, 22:37     Передача в функцию метод класса
Ответ Создать тему
Опции темы

Текущее время: 05:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru