Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.84/32: Рейтинг темы: голосов - 32, средняя оценка - 4.84
4 / 4 / 1
Регистрация: 18.08.2008
Сообщений: 73
1

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

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


Есть укзатель на функцию. Есть перегруженная функция. как присвоить указателю нужный нам вариант этой перегруженной функции?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.05.2009, 19:53
Ответы с готовыми решениями:

Присвоение значения указателю
Как можно, вот так, присваивать указателю значение? Разве, указатель не должен всегда содержать...

Присвоение указателю на char значения int
доброе время суток уважаемые пользователи как можно присвоить int значение char *'у .int имеет...

Присвоение значения фунции fopen указателю на файл
В "простом" компиляторе C++ я бы записал так: FILE * f; if ( f=fopen(file_name, "r") == 0)...

Как передать из функции пользователя в главную функцию значения по ссылке и указателю
Доброго дня, форумчане, столкнулся с проблемой, задание на лабораторной: Найти произведение и...

9
682 / 231 / 16
Регистрация: 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();
1
4 / 4 / 1
Регистрация: 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. Как дальше?
0
2808 / 1399 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
26.05.2009, 20:14 4
Цитата Сообщение от leviaphan Посмотреть сообщение
pointer нужно присвоить f. Как дальше?
т.е. вам нужно функции присвоить значения указателя? я вас разачарую, такое не возможно
0
4 / 4 / 1
Регистрация: 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 перегружена.
0
MCSD: APP BUILDER
8789 / 1067 / 104
Регистрация: 17.06.2006
Сообщений: 12,604
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;
1
Evg
Эксперт CАвтор FAQ
21153 / 8169 / 628
Регистрация: 30.03.2009
Сообщений: 22,468
Записей в блоге: 30
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)
1
4 / 4 / 1
Регистрация: 18.08.2008
Сообщений: 73
26.05.2009, 22:42  [ТС] 8
А как делать то же самое с функциями - методами класса?
0
Evg
Эксперт CАвтор FAQ
21153 / 8169 / 628
Регистрация: 30.03.2009
Сообщений: 22,468
Записей в блоге: 30
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;
}
1
MCSD: APP BUILDER
8789 / 1067 / 104
Регистрация: 17.06.2006
Сообщений: 12,604
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);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2009, 23:17

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Присвоение по указателю на 32 и 64 битных машинах
Добрый день. Скомпилированная программа на 64-битной машине аварийно завершается....

Присвоение адреса указателю, равному NULL
В конструкторе класса я присваиваю адрес переменной укзаателю,который равен был инициализирован...

std::list присвоение указателю на структуру итератора
Написал пример для показа проблемы // Почему я не могу указателю на структуру присвоить...

Шаблонные классы. Присвоение к указателю и приведение типов
Добрый вечер, ув. форум, есть к вам вопрос. Есть род. абстрактный класс: ParentAbstact Есть два...


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

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

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