[C++] Błąd przy przypisywaniu wskaźnika funkcji do struktury
Ostatnio zmodyfikowano 2012-01-12 15:23
xevuel Temat założony przez niniejszego użytkownika |
[C++] Błąd przy przypisywaniu wskaźnika funkcji do struktury » 2012-01-11 15:50:19 Mam taką strukturę: struct function { string name; template < class A > A func(...); int arg_count; };
i funkcję: template < class T > bool AddFunction( string name, T func, int arg_count ); Wewnątrz tej funkcji chcę wpisać do wyżej podanej struktury wskaźnik na funkcję funcs[ apf ].func = func; gdzie funcs to tablica struktur function. Przy próbie skompilowania tego kodu dostaję błąd invalid use of member (did you forget the `&' ?)
No i próbowałem kombinować z tymi wskaźnikami i adresami, ale tak czy tak mi się nie kompiluje, najwyżej dostaję inny błąd (też wskazujący na tą linijkę). Co powinienem zmienić, aby działało? |
|
pekfos |
» 2012-01-11 17:12:26 To nie jest wskaźnik na funkcję. Chyba zostało to omówione w kursie. Jak nie to poszukaj w google.. |
|
ison |
» 2012-01-11 17:13:49 template < class A > A func(...);
|
to nie jest deklarowanie wskaźnika na funkcję szablonową tylko w Twoim przypadku zwykłe zadeklarowanie metody szablonowej, a ciężko pod metodę szablonową coś podpisać |
|
xevuel Temat założony przez niniejszego użytkownika |
» 2012-01-12 08:15:12 To jak zadeklarować wskaźnik na funkcję która może mieć raz 3 argumenty, raz 5? |
|
pekfos |
» 2012-01-12 08:54:26 A jak niby chcesz wywołać taką funkcję? |
|
ison |
» 2012-01-12 13:27:45 void func(...) { }
int main() { void( * ptr )(...) = & func; ptr( 3, 4 ); ptr( 3 ); ptr( 3, 4, 5, 6, 23 ); }
tylko w ten sposób nie możesz zdecydować w czasie runtime ile argumentów przekazać |
|
xevuel Temat założony przez niniejszego użytkownika |
» 2012-01-12 15:23:41 Tak, tylko że ten sposób nie zadziała przy takiej funkcji: float add( float arg1, float arg2 );
Mi nie chodzi o to, żeby funkcja miała zmienną liczbę argumentów, tylko żeby wskaźnik w strukturze mógł przyjąć funkcję zarówno o 3 argumentach jak i o 5. Po prostu różna funkcja ma różna liczbę argumentów i każda musi się dać do tej struktury przypisać. Chcę ją wywołać np. tak: ( * funcs[ apf ].func )( arg1, arg2 ); ( * funcs[ apf + 1 ].func )( arg1, arg2, arg3.arg4, arg5 );
czy jakoś tak; nie wiem czy to zadziała, nie próbowałem jeszcze. //EDIT: Sam nie wiem, czy moje pytanie było takie głupie, czy takie trudne... W każdym bądź razie spróbuję zastosować unie. |
|
« 1 » |