Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 16

Нужно реализовать массив указателей на функции

02.01.2013, 18:32. Показов 2364. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех, мира и добра вам! Помогите пожалуйста!

Нужно реализовать массив указателей на функции в Windows Forms VS2010 C++.
Долго пытался мурыжить чего-то, и подошел вот к этому, но все ровно с ошибками.
В функцию массива должны передаваться аргументы - две строки.

Если можно поправте этот код, а если это все брехня, как тогда реализовать мою цель.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
//где-то здесь объявить массив ptrFunc
array<int^>^ptrFunc(String^,String^);
// ...
 
#pragma endregion
// где-то в методах Form1 проинициализировать массив функциями func1, func2
 
ptrFunc(String^, String^)=gcnew array<int^> (2) {func1, func2};
 
//далее где-то в методах Form1 инициализация func1 (пропустим func2)
int func1(String^ a,String^ b) {
    MessageBox::Show(a,b);
    return 0;}
 
//где-то вызывается функции массива
ptrFunc[0]("Привет мир!","Приветствие");
Спасибо люди добрые, дай вам бог здоровья.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.01.2013, 18:32
Ответы с готовыми решениями:

Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес...

Реализовать вызов методов класса с помощью указателей на функции
Помогите пожалуйста!!! Есть несколько классов. Необходимо вызывать методы класса с помощью указателей на функции. В методах используется...

Как реализовать двухмерный динамический массив с использованием механизма указателей
Как реализовать двухмерный динамический массив с использованием механизма указателей? Можно маленький пример сразу привести. Спасибо!

7
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
02.01.2013, 18:47
gelidan, Напишите задание, как вам дал преподаватель .
В NET нет указателей на функции, там делегаты . Возможно здесь какая- то ошибка .
0
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 16
02.01.2013, 19:52  [ТС]
Это не задание, я самостоятельно изучаю C++ (хобби).
Выходит, через указатели на функции никак не получиться, или может есть способы, запихнуть адреса функций в массивы.
Разочарован...
Че за делегаты какие-то. Аналог какой-то, можно реализовать ими мою цель?
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
02.01.2013, 20:05
Цитата Сообщение от gelidan Посмотреть сообщение
самостоятельно изучаю C++
У вас пример не С++ .а С++\СLI

Цитата Сообщение от gelidan Посмотреть сообщение
можно реализовать ими мою цель?
Наверно можно, честно даже пытаться не хочу делать это на СLI
C# учу и чистый С++ . Этого достаточно что бы понимать как
работать в Windows Forms С++\СLI
Про делегаты можно здесь посмотреть http://msdn.microsoft.com/ru-r... fyy8e.aspx или в книгах по C#
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.01.2013, 06:02
Механизм делегатов, действительно реализует дескрипторы подобные указателям на функции, но он относится к связи объекта, класса события и одной или нескольких функций обработчиков этого события.
Что касается указателей на функции в Windows Forms, то функции объявленные в классе (в Form, в частности) являются его методами и получить адрес на них не получится и не нужно.
Однако, поскольку указатель типа отслеживаемого дескриптора (^), вне ref class'а не объявляется, можно для функций, которые нужно вызвать косвенно, объявить небольшую, иерархически связанную группу классов. Для этого создадим .h и .Cpp файлы.
Header Files->Add->New Item->Code-> .h
вводим имя ArifmBase
и
Source Files->Add->New Item->Code-> .Cpp
вводим имя ArifmBase.
Содержимое файлов во вложениях.
Это громоздко, но если кто-то скажет как проще, буду рад.
Вложения
Тип файла: txt ArifmeticBase.cpp.txt (304 байт, 4 просмотров)
Тип файла: txt ArifmeticBase.h.txt (395 байт, 3 просмотров)
Тип файла: txt Form1.h.txt (3.9 Кб, 4 просмотров)
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
03.01.2013, 10:39
Цитата Сообщение от IGPIGP Посмотреть сообщение
Это громоздко, но если кто-то скажет
IGPIGP, так у вас массив классов получился .
а не массив указателей на функции ( на методы )

Через делегаты :
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
45
46
47
48
49
public: delegate double MyDelegate( double, double );
 
double division (double a , double b )
{
    if (b == 0)
        throw gcnew DivideByZeroException();
    return (a / b);
}
 
 
double addition (double a , double b )
{
    return ( a + b );
}
 
double difference (double a , double b )
{
    return ( a - b );
}
 
    double multiplication (double a , double b )
{
    return ( a * b );
}
 
 
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
            
             array<MyDelegate^> ^arrayDelegates = {
                 gcnew MyDelegate(this,&Form1::division),
                 gcnew MyDelegate(this,&Form1::addition),
                 gcnew MyDelegate(this,&Form1::difference),
                 gcnew MyDelegate(this,&Form1::multiplication)};
 
             double fVal1 = 3, fVal2 = 0.234;
 
     try
       {                
             for each (auto item in arrayDelegates)
             {
                 textBox1->AppendText(item(fVal1 , fVal2).ToString("F2") + "  ");
             }
     }
     catch ( Exception  ^e)
     {   
          MessageBox::Show(e->Message);
     }
 
         }
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.01.2013, 14:29
Цитата Сообщение от MrCold Посмотреть сообщение
IGPIGP, так у вас массив классов получился .
а не массив указателей на функции ( на методы )
Конечно. Прямо на метод не получается.
Однако, за код
Цитата Сообщение от MrCold Посмотреть сообщение
Через делегаты :
огромное спасибо. Выходит делегат можно связать с целой формой и тогда это фактически указатель в её пределах!
Это же здорово!
Вот тут, механическая неточность (пишу для [ТС], т.к. у меня не съедобно):
Цитата Сообщение от MrCold Посмотреть сообщение
C++
1
 for each (auto item in arrayDelegates)
то есть:
C++
1
 for each (MyDelegate^ item in arrayDelegates)
1
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 16
09.01.2013, 17:58  [ТС]
Товарищи!
А если объявить глобальный массив указателей на функции, и сами функции сделать глобальными. Должно получиться.
Только, не могли бы подсказать, как передать в качестве аргумента этих функций объект Forms1, так, чтобы было возможным оперировать всеми элементами (кнопки, боксы и т.д.).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.01.2013, 17:58
Помогаю со студенческими работами здесь

Различные функции, для которых можно создать массив указателей на функции
Придумайте не менее 3-х различных функций, для которых можно создать массив указателей на функции.

Объявить массив из N указателей на функции, возвращающих указатели на функции, возвращающие указатель на char
Задание: Объявить массив из N указателей на функции, возвращающих указатели на функции, возвращающие указатель на char. Можно...

Массив указателей на функции
Скажите пожалуйста - поддерживает или нет Arduino IDE массив указателей на функции (раньше работал только с массивом процедур в FPC, но...

Массив указателей на функции
Как правильно создать массив? С простыми функциями, где не больше двух параметров, все получается, все работает, а тут в чем-то ошибка. ...

Массив указателей на функции
Мне необходимо создать массив, состоящий из 10 элементов, который хранил бы указатели на функции. Потом этот массив надо наполнить...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru