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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.81
leviaphan
4 / 4 / 0
Регистрация: 18.08.2008
Сообщений: 73
#1

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

26.05.2009, 19:53. Просмотров 4494. Ответов 9
Метки нет (Все метки)

Есть укзатель на функцию. Есть перегруженная функция. как присвоить указателю нужный нам вариант этой перегруженной функции?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2009, 19:53     Присвоение значения указателю на функцию
Посмотрите здесь:

C++ Присвоение значения фунции fopen указателю на файл
Передача массива в функцию по указателю C++
C++ std::list присвоение указателю на структуру итератора
Присвоение указателю на char значения int C++
Присвоение указателю члену класса нового адреса, ошибка компиляции C++
C++ Передача объекта по указателю в функцию
C++ Присвоение адреса указателю, равному NULL
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mecid
 Аватар для Mecid
678 / 227 / 4
Регистрация: 15.10.2007
Сообщений: 1,247
26.05.2009, 20:00     Присвоение значения указателю на функцию #2
C
1
2
3
4
5
6
7
void (*pointer)(void);
void f(void){return 0;}
void f1(void){return 1;}
pointer=f;
pointer();
pointer=f1;
pointer();
leviaphan
4 / 4 / 0
Регистрация: 18.08.2008
Сообщений: 73
26.05.2009, 20:07  [ТС]     Присвоение значения указателю на функцию #3
Цитата Сообщение от Mecid Посмотреть сообщение
C
1
2
3
4
5
6
7
void (*pointer)(void);
void f(void){return 0;}
void f1(void){return 1;}
pointer=f;
pointer();
pointer=f1;
pointer();
Вы неправильно поняли вопрос.

C
1
2
3
void (*pointer)(void);
void f(void){return;}
void f(int){return;}
pointer-у нужно присвоить f. Как дальше?
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
26.05.2009, 20:14     Присвоение значения указателю на функцию #4
Цитата Сообщение от leviaphan Посмотреть сообщение
pointer нужно присвоить f. Как дальше?
т.е. вам нужно функции присвоить значения указателя? я вас разачарую, такое не возможно
leviaphan
4 / 4 / 0
Регистрация: 18.08.2008
Сообщений: 73
26.05.2009, 20:19  [ТС]     Присвоение значения указателю на функцию #5
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
т.е. вам нужно функции присвоить значения указателя? я вас разачарую, такое не возможно
Нет, указателю адрес функции.

Добавлено через 2 минуты 51 секунду
Должно получится примерно так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
void f(char* msg)
{
    cout << msg;
}
 
int main()
{
    void (*out) (char* input);
    out = &f;
    out("hello");
    return 0;
}
Но оно должно работать и в случае, если функция f перегружена.
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
26.05.2009, 20:38     Присвоение значения указателю на функцию #6
C++
1
2
3
4
5
6
7
8
9
10
11
void f(char*) {}
void f(long) {}
 
template <typename T>
struct f_
{
    typedef void (*type)(T);
};
 
f_<char*>::type pf1 = &f;
f_<long>::type pf2 = &f;
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17179 / 5433 / 336
Регистрация: 30.03.2009
Сообщений: 14,717
Записей в блоге: 26
26.05.2009, 21:35     Присвоение значения указателю на функцию #7
Надо указатель на функцию описывать с тем же набором параметров

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
#include <iostream>
using namespace std;
 
void f (const char* msg)
{
  cout << "f(char*)" << endl;
}
 
void f (void)
{
  cout << "f(void)" << endl;
}
 
int main()
{
  void (*out1) (const char* input);
  void (*out2) (void);
 
  out1 = f;
  out1 ("hello");
 
  out2 = f;
  out2 ();
 
  return 0;
}
Код
$ g++ a.cc
$ ./a.out 
f(char*)
f(void)
leviaphan
4 / 4 / 0
Регистрация: 18.08.2008
Сообщений: 73
26.05.2009, 22:42  [ТС]     Присвоение значения указателю на функцию #8
А как делать то же самое с функциями - методами класса?
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17179 / 5433 / 336
Регистрация: 30.03.2009
Сообщений: 14,717
Записей в блоге: 26
26.05.2009, 23:05     Присвоение значения указателю на функцию #9
Цитата Сообщение от leviaphan Посмотреть сообщение
А как делать то же самое с функциями - методами класса?
В этом случае нужно понимать, что в любой нестатический метод класса неявно передаётся ещё и указатель на экземпляр класса (который внутри метода доступен как this). А потому в случае указателя на метод вызов можно делать только с экземпляром класса

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
class C
{
  public:
    void func (void)
    {
      cout << "C::func" << endl;
    }
};
 
int main()
{
  void (C::*out) (void) = &C::func;
 
  C c, *p;
 
  (c.*out)();
  (p->*out)();
 
  return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2009, 23:17     Присвоение значения указателю на функцию
Еще ссылки по теме:

Есть ли альтернатива указателю на функцию C++
Шаблонные классы. Присвоение к указателю и приведение типов C++
Присвоение значения указателю C++
Передача в функцию по ссылке или указателю C++
Присвоение по указателю на 32 и 64 битных машинах C++

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

Или воспользуйтесь поиском по форуму:
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
26.05.2009, 23:17     Присвоение значения указателю на функцию #10
leviaphan,
А как делать то же самое с функциями - методами класса?
скоро (надеюсьЖ) можно будет делать так:
C++
1
2
3
4
5
6
7
8
struct Foo
{
   void f(int);
};
 
Foo foo;
std::function<void (int)> fp = std::bind(&Foo::f, foo, _1);
fp(1);
Yandex
Объявления
26.05.2009, 23:17     Присвоение значения указателю на функцию
Ответ Создать тему
Опции темы

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