Univerzální třída – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Univerzální třída – C / C++ – Fórum – Programujte.comUniverzální třída – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
BDS+3
Věrný člen
5. 1. 2015   #1
-
0
-

Ahoj, potřeboval bych poradit s tímto:

mám třídu: 

class TMyCustomItem
{
 private :
	bool modify;
	bool checked;
	unsigned char *bdata;

 public :
	TMyCustomItem(unsigned int DataSize, unsigned char *data)
	{
         bdata = new unsigned char[DataSize];
	 if(data==NULL)ZeroMemory(bdata, DataSize);
	 else memcpy(bdata, data, DataSize);
	}
	~TMyCustomItem(){delete []bdata;}
};

ale potřeboval bych ji předělat tak, aby byla univerzální, tzn. abych mohl místo unsigned char *bdata dát třeba strukturu nebo jen řetězec o určité velikosti a nebo jen int, a nemusel celou tu třídu v projektu znovu zakládat. Vím, že bych mohl vyřešit zadáním velikosti, vytvořením pole a přetypováním, ale zajímalo by mě jestli se to dá vyřešit ještě jinak.

Myslím, že se nato používá template, ale nevím jak to tady použít.

Nahlásit jako SPAM
IP: 31.47.99.–
W11 :)
Satik0
Stálý člen
5. 1. 2015   #2
-
0
-

pointer na void

Nahlásit jako SPAM
IP: 77.87.240.–
BDS+3
Věrný člen
5. 1. 2015   #3
-
0
-

#2 Satik
Třeba, ale to by bylo vlastně o tom přetypování.

Teď vidím, že jsem neuvedl proč se nato ptám a asi je to potřeba uvést:

řekneme, že bych tuto třídu nějakým způsobem na definoval do jiné ve které by byl vector těchto tříd, a ten by očekával, že bdata budou vždy stejného typu. Vím, že vectoru je to jedno, ale mě to třeba jedno nebude a chci aby mě kompilátor oznámil chybu.

Nahlásit jako SPAM
IP: 31.47.99.–
W11 :)
Satik0
Stálý člen
Nahlásit jako SPAM
IP: 77.87.240.–
BDS+3
Věrný člen
5. 1. 2015   #5
-
0
-

díky.

takže mám to takto: 

#include <stdio.h>
using namespace std;
//---------------------------------------------------------------
struct MYTEST
{
 int x;
 int y;
 char txt[24];
};

//---------------------------------------------------------------
template <class T>
class TMyCustomItem
{
 private :

 public :
	bool Modify;
	bool Checked;
	int Tag;
	T data;

	TMyCustomItem(T data)
	{
		 Modify = false;
		 Checked = false;
		 this->data = data;
	}

	TMyCustomItem(int tag, T data)
	{
		 this->Tag = tag;
		 this->data = data;
	}

	~TMyCustomItem(){}
};
//---------------------------------------------------------------

int main()
{
 MYTEST tst = {2,3,"blabla"};

 TMyCustomItem<MYTEST> itm(27, tst);

 printf("X=%i\nY=%i\nTag=%i\nText: %s", tst.x, tst.y, itm.Tag, tst.txt);

 return 0;
}

A ještě jeden dotaz: kdybych použil třeba TMyCustomItem<char*> jak by se dala v ~TMyCustomItem() uvolňovat paměť? 

Nahlásit jako SPAM
IP: 31.47.99.–
W11 :)
KIIV
~ Moderátor
+43
God of flame
5. 1. 2015   #6
-
0
-

#7 BDS
to uz by pak bylo lepsi pouzit  <char> a uvnitr  T * ... ;  pak muzes uvolnovat s tim ze by to mel byt vetsinou i pointer

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
BDS+3
Věrný člen
5. 1. 2015   #7
-
0
-

#6 KIIV
díky. to jsem se ptal spíš ze zvědavosti, zatím to nepotřebuji.

Nahlásit jako SPAM
IP: 31.47.99.–
W11 :)
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 41 hostů

Podobná vlákna

2x trida — založil Roman

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý