Dynamiczne wskaźniki na funkcje

0

Witam. Kilka tygodni temu przeczytałem temat, w którym była umieszczone drzewko menu. Chcę też coś takiego zrobić, wraz z tym, że jako wybór w menu można dać funkcje. W swojej klasie umieściłem wskaźnik na wskaźnik na funkcje typu void, ale nie wiem, jak przydzielić pamięć dynamicznie - nie wiem, ile będzie potrzebnych, a tablica by była tylko z określonym rozmiarem. Więc mam pytanie - jak mam użyć operatora new?
Próbowałem:

Funkcje = new void([Ilosc])(); 
0

Mogłby jakoś jaśniej i bardziej obrazowo, bo nie za bardzo rozumiem?


Opolski Portal Programistyczny
http://programowanie.opole.pl

0

@Macron nie bardzo rozumiem co chcesz osiągnąć, ale:
żeby mieć zbiór danych o nieokreślonym rozmiarze użyj <list> albo <vector>

0

Jeżeli w tym całym problemie chodzi o dynamicznie alokowaną pamięć to tak jak kolega wyżej pisze, użyj typów kontenerowych. A co do tego co piszesz to tablica wcale nie musi mieć ciągle tego samego rozmiaru, bo zawsze możesz stworzyć nową, większą tablice i sobie prznieść dane ze starej - tak właśnie działa np. klasa vector. Możesz sobie też zawsze samemu zaimplementować listę jednokierunkową, tak działą klasa list.


Opolski Portal Programistyczny
http://programowanie.opole.pl

0

Po prostu chcę osiągnąć dynamiczną tablicę wskaźników do funkcji typu void, a nie wiem jak ją operatorem new zadeklarować, zdefiniować... Do tekstów weny nie mam, żeby to łatwo opowiedzieć -,-.

0

lub tak:

typedef void (*func)();
func* funkcje = new func[4];
delete [] funkcje;

bez typedefa nie udalo mi sie tego zapisac (nie wiem czy sie w ogole da), aczkolwiek polecam jednak uzywanie jakiegos kontenera do tego typu rzeczy

1
#include <iostream>
#include <vector>
using namespace std;

typedef void (*foo)(int);

void fun(int i){
    cout << i;
}

int main(void)
{
    vector<foo> v1;
    v1.push_back(fun);
    v1[0](5); //wypisze 5 na ekranie
}

A co do budowania wskaźników na funkcję to: http://programowanie.opole.pl/archives/746


Opolski Portal Programistyczny
http://programowanie.opole.pl

0

Dziękuje, problem rozwiązany ;)

1
#include <iostream>
#include <algorithm>
#include <vector>

typedef void (*function_ptr)();

void foo1() {
    std::cout << "hey\n";
}
void foo2() {
    std::cout << "hi\n";
}
void foo3() {
    std::cout << "hello\n";
}

void call(function_ptr function) {
    function();
}

int main() {
    std::vector<function_ptr> v;
    v.push_back(foo1);
    v.push_back(foo2);
    v.push_back(foo3);
    std::for_each(v.begin(), v.end(), call);
    return 0;
}

edit: meh, się spóźniłem. ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1