Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
vbloodv
22 / 22 / 3
Регистрация: 15.12.2012
Сообщений: 314
1

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

19.01.2013, 21:22. Просмотров 727. Ответов 8
Метки нет (Все метки)

Не получается передать в функцию метод класса...
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()
Передается !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2013, 21:22
Ответы с готовыми решениями:

Передача массива в метод класса
Здравствуйте уважаемые форумчане. Намекните пожалуйста (если можно с примером)...

Передача массива в метод класса
Здравствуйте, я не могу понять почему я не выходит передать статический массив...

Передача define в метод класса
Подскажите, есть множество define, как мне передать одну их них в метод класса?

Передача объекта в метод класса
здравствуйте. в процессе написания программы возник такой вопрос. можно ли при...

Передача переменных из функции в метод класса
У меня есть главная функция и класс, в котором есть 2 функции. Как мне после...

8
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
19.01.2013, 21:35 2
потому что указатель на свободную функцию и указатель на метод класса - это разные указатели.
тут даже касты не помогут. оно скомпилится, но при попытке вызвать метод - все будет плохо.
0
I.M.
567 / 550 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
19.01.2013, 21:38 3
boost::bind или std::bind
1
vbloodv
22 / 22 / 3
Регистрация: 15.12.2012
Сообщений: 314
19.01.2013, 21:55  [ТС] 4
Цитата Сообщение от I.M. Посмотреть сообщение
boost::bind или std::bind
Нашел английскую документацию начинаю читать, но я в технической литературе не настолько силен своими словами можешь подсказать что она делает, я так понял что-то вроде макроса с привязкой параметров функций?
0
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
19.01.2013, 22:06 5
Работа методов класса зависит от состояния объекта. Без объекта они не имеют смысла.
Можно передавать в качестве параметра функции статические методы класса.
1
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
19.01.2013, 22:08 6
бинды не помогут если нет возможности изменить сигнатуру функции, которая принимает указатель на свободную функцию.
1
vbloodv
22 / 22 / 3
Регистрация: 15.12.2012
Сообщений: 314
19.01.2013, 22:18  [ТС] 7
Цитата Сообщение от DU Посмотреть сообщение
бинды не помогут если нет возможности изменить сигнатуру функции, которая принимает указатель на свободную функцию.
Цитата Сообщение от lemegeton Посмотреть сообщение
Работа методов класса зависит от состояния объекта. Без объекта они не имеют смысла.
Можно передавать в качестве параметра функции статические методы класса.
Два отличных совета !

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

Добавлено через 4 минуты
Да, действительно статические можно передавать !!!
0
I.M.
567 / 550 / 47
Регистрация: 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;
}
1
DU
1486 / 1132 / 164
Регистрация: 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);
будет работать?
1
19.01.2013, 22:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2013, 22:37

Передача неизвестного объекта в метод класса
Ситуация такова: имеется класс (в зачаточном состоянии) class Archer {...

Передача класса по ссылки в метод (ругается)
Среда Linux gcc 4.1.2 Есть прототип метода (класса Time) Time...

Передача массива классов в метод класса
1. этап. Разработать библиотеку функций(h-файл) для выполнения: – чтения...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru