abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 17:25 | IT novinky

Do prodeje (Farnell) se dostal jednodeskový počítač Tinker Board (unboxing). Jedná se o konkurenci Raspberry Pi 3 od společnosti Asus. Porovnání (jpg) těchto počítačů například na CNXSoft. Cena Tinker Boardu je 55 £.

Ladislav Hagara | Komentářů: 7
včera 14:44 | Zajímavý projekt

Byla zveřejněna pravidla hackerské soutěže Pwn2Own 2017, jež proběhne od 15. do 17. března v rámci bezpečnostní konference CanSecWes ve Vancouveru. Soutěžit se bude o více než milion dolarů v pěti kategoriích. Letos se bude útočit i na Ubuntu. Jedná se již o 10. ročník této soutěže.

Ladislav Hagara | Komentářů: 1
včera 13:33 | Nová verze

Po sedmi měsících vývoje od vydání verze 5.7 byla vydána verze 5.8 (YouTube) toolkitu Qt. Z novinek lze zmínit například Qt Lite pro vestavěná zařízení. Nově jsou plně podporovány moduly Qt Wayland Compositor (YouTube) a Qt SCXML (YouTube). Současně byla vydána verze 4.2.1 integrovaného vývojového prostředí (IDE) Qt Creator.

Ladislav Hagara | Komentářů: 1
včera 11:52 | Pozvánky

Lednový Prague Containers Meetup se koná ve čtvrtek 26. ledna 2017 od 18:00 v Apiary, Pernerova 49, Praha 8. Přijďte se podívat na přednášky o Enterprise Kubernetes a Jenkins as a code.

little-drunk-jesus | Komentářů: 0
včera 11:40 | Pozvánky

Program letošního ročníku konference Prague PostgreSQL Developer Days, která se koná již 15. a 16. února 2017 na ČVUT FIT, Thákurova 9, Praha 6, byl dnes zveřejněn. Najdete ho na stránkách konference včetně anotací přednášek a školení. Registrace na konferenci bude otevřena zítra (24. ledna) v brzkých odpoledních hodinách.

TomasVondra | Komentářů: 0
22.1. 02:20 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, upozorňuje na svém blogu, že nový Inkscape 0.92 rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Problém by měl být vyřešen v Inkscape 0.92.2 [reddit].

Ladislav Hagara | Komentářů: 0
22.1. 02:02 | Komunita

Øyvind Kolås, hlavní vývojář grafických knihoven GEGL a babl, které využívá grafický program GIMP, žádá o podporu na Patreonu. Díky ní bude moci pracovat na vývoji na plný úvazek. Milník 1000 $, který by stačil na holé přežití, se již téměř podařilo vybrat, dalším cílem je dosažení 2500 $, které mu umožní běžně fungovat ve společnosti.

xkomczax | Komentářů: 12
21.1. 23:54 | Pozvánky

DevConf.cz 2017, již devátý ročník jedné z největších akcí zaměřených na Linux a open source ve střední Evropě, proběhne od pátku 27. ledna do neděle 29. ledna v prostorách Fakulty informačních technologií Vysokého učení technického v Brně. Na programu je celá řada zajímavých přednášek a workshopů. Letos je povinná registrace.

Ladislav Hagara | Komentářů: 0
21.1. 22:11 | Nová verze

Byla vydána verze 1.0.0 emulátoru terminálu Terminology postaveného nad EFL (Enlightenment Foundation Libraries). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
20.1. 17:00 | Nová verze

Byl vydán Docker 1.13. Přehled novinek na YouTube a v poznámkách k vydání na GitHubu. Docker umožňuje běh aplikací v softwarových kontejnerech (Wikipedia).

Ladislav Hagara | Komentářů: 7
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (11%)
 (2%)
 (73%)
 (3%)
 (10%)
Celkem 387 hlasů
 Komentářů: 31, poslední včera 19:19
Rozcestník
Reklama

Dotaz: ukazatel na fci jako parametr funkce v c++

27.1.2011 17:49 Pepan
ukazatel na fci jako parametr funkce v c++
Přečteno: 628×
Je možné v C++ použít ukazatel na funkci jako parametr jiné funkce?

Snažím se přesně o to, co je v níže uvedeném příkladu, ale s tím rozdílem., že fce jsou obalené ve třídě. Překladač na mě křičí, že mám špatný parametr fce NapisStoTecek.

Děkuju,


/* Tohle je jako časově náročná funkce z knihovny */
void NapisStoTecek(void (* callback)(int)) {
  int i;

  for (i = 0; i < 100; i++) {
    /* Jednou za deset teček zavolej parametr */
    if (!(i % 10)) callback(i);
    /* Vypisuj tečky */
    putchar('.');
  }
}

/* Funkce volaná z knihovny, ale definovaná v aplikačním kódu */
void parametr(int procent) {
  printf("\nHotovo na %i%%\n", procent);
}

/* Hlavní program */
int main(void) {
  NapisStoTecek(parametr);
  return 0;
}

Odpovědi

27.1.2011 18:11 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: ukazatel na fci jako parametr funkce v c++
že fce jsou obalené ve třídě
A jak konkrétně? Jestli je parametr třídní funkce, tak pak má ve skutečnosti jako první parametr odkaz na this. Jestli si dobře pamatuji, tak v C++ jsou na tohle oblíbené šablony + funktory (třídy s operátorem ()).

Dodaný příklad funguje – jak vypadá ten, co se vzpouzí?
I am always ready to learn although I do not always like to be taught. (W. Churchill)
27.1.2011 18:20 l4m4
Rozbalit Rozbalit vše Re: ukazatel na fci jako parametr funkce v c++
Doporučuji přečíst

http://www.parashift.com/c++-faq-lite/pointers-to-members.html#faq-33.1
27.1.2011 19:59 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: ukazatel na fci jako parametr funkce v c++

Příklad syntaxe obou variant (statická metoda a pointer na metodu):

#include <iostream>

class cls;

typedef void (*callback1)(char);
typedef void (cls::*callback2)(char);

class cls {
public:
  cls() {}

  static void cb1(char c) { std::cout << c; }
  void cb2(char c) { std::cout << c; }

  void use1(callback1 f) { (*f)('A'); }
  void use2(callback2 f) { (this->*f)('B'); }
};

int main()
{
  cls X;

  X.use1(cls::cb1);
  X.use2(&cls::cb2);
  std::cout << std::endl;
  
  return 0;
}
27.1.2011 19:41 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: ukazatel na fci jako parametr funkce v c++
Pravděpodobně vám jde o pointer na metodu, ale těžko hádat, když neukážete ten příklad, se kterým máte problém, ale nějaký jiný, kde problém není.
30.1.2011 00:05 fsgsfg
Rozbalit Rozbalit vše Re: ukazatel na fci jako parametr funkce v c++
Jasne, no problem: Pointers to functions (posledni odstavec dole). Pokud je ta funkce v nejake tride, pak se musi uvest cela trida. Treba Classa::addition.
30.1.2011 00:30 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: ukazatel na fci jako parametr funkce v c++
To ovšem funguje pouze pokud je ta metoda static.
30.1.2011 09:20 majvan | skóre: 4 | blog: Fandime linuxu | Trenčín
Rozbalit Rozbalit vše Re: ukazatel na fci jako parametr funkce v c++
Musis ten callback deklarovat ako int (Trieda::*callback)(int) a potom ju zavolat cez retval = this->*callback(int);.
30.1.2011 15:53 __dark__
Rozbalit Rozbalit vše Re: ukazatel na fci jako parametr funkce v c++
Tady je trochu víc k problematice:

http://www.codeproject.com/kb/cpp/FastDelegate.aspx
30.1.2011 18:04 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: ukazatel na fci jako parametr funkce v c++
To co teď napíšu neřeší tento případ, ale třeba je to odpovědí otázku, z které mohl vzniknout tento požadavek :)
#include <iostream>

/*Abstarct class as interface in the library */
class cosiPrintable {
  public:
    virtual void cosiDo(int procent) = 0; //or {};
};

/*Library  functions*/
class libraryFunctions {

  private:
    libraryFunctions();
    libraryFunctions(libraryFunctions &instance);
  public:
    static void NapisStoTecek(cosiPrintable *cosi)
    {
      int i;
      for (i = 0; i < 100; i++) {
        /* Jednou za deset teček zavolej parametr */
        if (!(i % 10))
          cosi->cosiDo(i);
        /* Vypisuj tečky */
        std::cout << ".";
        std::cout.flush();
      }
      cosi->cosiDo(100);
    }
};

//--------- END OF THE LIBRARY ----------------


/* My implementation  */
class myPrint : public cosiPrintable{
  public:
   virtual void cosiDo(int procent) {
     std::cout << std::endl << "Hotovo na " << procent << " %" << std::endl;
  }
};

/* Hlavní program */
int main(void) {
  myPrint myPrintInstance;
  libraryFunctions::NapisStoTecek(&myPrintInstance);
  return 0;
}
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.