Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 4 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 16.12.15
Prihlásený: 11.03.22
Príspevky: 21
Témy: 9
Príspevok NapísalOffline : 08.06.2017 20:28

Ahojte

neviem si už rady. Potrebujem zavolať ukazateľ na statickú funkciu, ktorá je súčasťou triedy. Pozeral som na internete všade možne ako som vedel a nič z toho mi nefunguje.
Tu je môj kód.
triedy.h
Kód:
#ifndef TRIEDY_H_
#define TRIEDY_H_

#include <iostream>
#include <string>
class A;
typedef std::string(A::*staticPointFunc)();
typedef void(A::*staticPointFVoid)(); // funkcia ktoru chcem volat
class A
{
private:
   std::string mText;
public:
   A()
   {
      fu2 = &A::getSomeText;  // funkcia ktoru chcem volat
   }
   static staticPointFunc f;
   static staticPointFVoid fu2; // funkcia ktoru chcem volat
   static std::string mSText;

   // kod ...

   void getSomeText()
   {
      std::cout << "getSomeText()\n";
      mText = "text zmeneny";
      update();
   }
   void update()
   {
      mSText = mText;
   }
};

class B
{
   // kod ..
};

#endif // !TRIEDY_H_


Source.cpp
Kód:
namespace NMS
{
   std::string S;
}

#include "triedy.h"
std::string A::mSText;
staticPointFVoid A::fu2;

int main()
{
   A a;
   a.setText("Toto je text.");
   // A::fu2(); // nefunguje
   //A::*fu2(); // nefunguje
   //(A::*fu2)(); // nefunguje
   //a.fu2(); // nefunguje
   //a.*fu2(); // nefunguje
   //(a.*fu2)(); // nefunguje
   A::fu2; // nic sa neudeje
   a.fu2; // nic sa neudeje
   
   B b;
   b.getText3();
   b.Show();
   //std::cout << "\nToto je m = " << m << std::endl;
   return 0;
}

Všade kde je napísané "// nefunguje", mám z google ako by sa mala zavolať funkcia a jej možné varianty. Ale už len keď to napíšem, VStudio mi to rovno prodčiarkne ako chybný kód. Inak používam VS2015.

Môj zámer je použiť túto statickú funkciu v inej triede, v tomto prípade v triede B. (ešte to tam nie je implementované z vyššie uvedeného dôvodu)


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 09.06.2017 7:54

Zbytočne to komplikuješ, nie? Urob to jednoducho http://www.learncpp.com/cpp-tutorial/812-static-member-functions/







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 16.12.15
Prihlásený: 11.03.22
Príspevky: 21
Témy: 9
Príspevok Napísal autor témyOffline : 09.06.2017 16:29

Ťažko povedať. Ak by som si písal celý kód sám, tak to možno neriešim, ale pri použití externej knižnice, hľadám riešenia, ako oddeliť môj kód od knižnice, ktorá používa vlastný main loop.
Takéto ukazovatele sa mi vidia ako najlepší spôsob, pretože ako statické metódy, tak si myslím že, aj statické ukazovatele na metódu sa môžu volať z kade chcem. Ale začínam mať pocit, že to asi tadeto nepôjde.

Podarilo sa mi spojazdniť ukazovateľ na statickú metódu, kde už funguje
Kód:
(a.*fu2)();
problém ale je, že potrebujem k tomu už vytvorený objekt triedy A. Ja by som potreboval niečo ako A::fu2() kde fu2 je ukazovateľ na metódu.

Tu je cely fungujúci kód, ak by to niekoho zaujímalo.
Kód:
triedy.h
class A;
typedef void(A::*staticPointFVoid)();   // fu2 FUNGUJE
class A
{
private:
   std::string mText;
public:
   typedef void(A::*staticF)();
   /* kompilator hodi chybu ak sa priradi A::sF = &A::getSomeText; ak v typedef nie je
      napisane A::, cize typedef void(*staticF)(); */
   static staticF sF();
   static std::string mSText;
   void getSomeText()
   {
      std::cout << "getSomeText()\n";
   }
};
Kód:
Source.cpp
#include "triedy.h"
std::string A::mSText;
staticPointFVoid fu2;   // fu2 FUNGUJE
A::staticF A::sF()      // sF FUNGUJE
{
   return &getSomeText;
}
int main()
{
   A a;
   fu2 = &A::getSomeText;   // fu2 FUNGUJE
   a.setText("Toto je text.");
   (a.*fu2)();   // fu2 FUNGUJE
   A::staticF sFunc = A::sF();   // pouzitie sF()
   (a.*sFunc)();   // FUNGUJE len s pomocou (a.*funkcia)
   A::sF();      // NEFUNGUJE nic sa neudeje
   return 0;
}


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 10.06.2017 18:16

Ak si stiahol niečo, čo má vlastný main, tak to nie je knižnica.
Druhá vec, ak chceš rozšíriť funkcionalitu nejakej existujúcej triedy, tak ju buď oddedíš, alebo urobíš wrapper. Nejaké ukazatele na metódy určite nie je cesta.







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Odpovedať na tému [ Príspevkov: 4 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. C++ vyvolanie funkcie

v Assembler, C, C++, Pascal, Java

0

396

15.04.2020 22:32

michaleres Zobrazenie posledných príspevkov

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie. C++ ukazovatel a odkaz

v Assembler, C, C++, Pascal, Java

13

1799

16.08.2010 11:58

Ďuri Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ukazovatel a operator delete c++

v Assembler, C, C++, Pascal, Java

5

490

14.05.2016 20:50

BX Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zobrazenie statickej stranky

v Redakčné systémy

0

646

05.06.2009 12:58

frenkacik Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vytvorenie statickej ip adresy

v Sieťové a internetové programy

9

2050

26.03.2010 22:24

Tech Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vysvetlenie funckie pri registracii

v PHP, ASP

4

1126

05.03.2008 13:18

enorm Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. funckie htmlentities() a formulare

v PHP, ASP

2

413

17.06.2008 14:25

mondzo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. OOP hodnota premennej z funckie

v PHP, ASP

1

260

27.10.2012 10:51

walther Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vyvolanie funkcie js. prr načítaní stránky

v JavaScript, VBScript, Ajax

11

775

31.03.2010 15:48

Ďuri Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. ukazovatel teploty :P

v Benchmarky a diagnostické programy

17

2547

02.09.2007 21:09

Jaro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ukazovateľ batérie (Ubuntu)

v Ostatné programy

3

597

28.11.2010 10:41

W.u.n.j.o Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nefunguje ukazovateľ jasu

v Ostatné

2

380

15.08.2012 21:21

MiSCHo_20 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. MiniAPP- Ukazovateľ ping

v Ostatné programy

6

399

08.01.2016 10:14

Lessik Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. upload skript - ukazovatel priebehu

v PHP, ASP

1

560

26.01.2009 17:44

emer Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. softver - ukazovateľ skore na futbal

v Grafické programy

1

372

12.12.2014 9:16

don jebot Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Automaticky presúvať ukazovateľ myši na predvolené tlačidlo

v Operačné systémy Microsoft

0

399

06.06.2012 17:45

fagi853 Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra