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

C++

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

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

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

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

Присвоение значения - C++ Builder
Здравствуйте, подскажите, как можно присвоить значения для небольшого диапазона _Nvidl = 15; _Tvidl = 1; ... for(int j =...

Присвоение нескольким компонентам формы одного и того же значения - C++ Builder
Нужно упростить код. Как это можно сделать? Вот сам код. Form4->Label1->Visible=False; Form4->Label1->Enabled=False; ...

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

Присвоение значения данным в структуре - Visual C++
Здравствуйте! Подскажите, пожалуйста, как присвоить значение переменной структуры. Например: ds.name = name_; Заранее благодарен!

Изменение значения по указателю крашит программу - C++ WinAPI
пытаюсь поменять значение по указателю, указывающему на область, где загружена kernel32.dll. Прога вылетает, при вызове VirtualQuery для...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Mecid
680 / 229 / 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
2788 / 1374 / 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
2359 / 1054 / 44
Регистрация: 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
17618 / 5842 / 375
Регистрация: 30.03.2009
Сообщений: 16,117
Записей в блоге: 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
17618 / 5842 / 375
Регистрация: 30.03.2009
Сообщений: 16,117
Записей в блоге: 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;
}
Rififi
2359 / 1054 / 44
Регистрация: 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);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2009, 23:17
Привет! Вот еще темы с ответами:

Присвоение значения указателю - C++
Как можно, вот так, присваивать указателю значение? Разве, указатель не должен всегда содержать адрес? const char* szString =...

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.05.2009, 23:17
Ответ Создать тему
Опции темы

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