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

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

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

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

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

Присвоение нескольким компонентам формы одного и того же значения
Нужно упростить код. Как это можно сделать? Вот сам код. ...

Написать функцию, которая по указателю принимает одномерный массив и его размер.
Здоров всэм!!! памагите ришыти задачу №1 Написати...

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

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

9
Mecid
680 / 229 / 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
leviaphan
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
Monte-Cristo
2796 / 1382 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
26.05.2009, 20:14 4
Цитата Сообщение от leviaphan Посмотреть сообщение
pointer нужно присвоить f. Как дальше?
т.е. вам нужно функции присвоить значения указателя? я вас разачарую, такое не возможно
0
leviaphan
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
Rififi
2363 / 1056 / 104
Регистрация: 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;
1
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 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
leviaphan
4 / 4 / 1
Регистрация: 18.08.2008
Сообщений: 73
26.05.2009, 22:42  [ТС] 8
А как делать то же самое с функциями - методами класса?
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 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
Rififi
2363 / 1056 / 104
Регистрация: 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);
0
26.05.2009, 23:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2009, 23:17

Передача зависящего значения в функцию
Хочу получить массив значений и аргументов некоторой функции f=y(x) Вызываю...

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

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


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

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

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