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

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é.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
BDS+2
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.–
Visual Studio C/C#/C++
(pouze samouk)
Reklama
Reklama
Satik0
Stálý člen
5. 1. 2015   #2
-
0
-

pointer na void

Nahlásit jako SPAM
IP: 77.87.240.–
BDS+2
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.–
Visual Studio C/C#/C++
(pouze samouk)
Satik0
Stálý člen
Nahlásit jako SPAM
IP: 77.87.240.–
BDS+2
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.–
Visual Studio C/C#/C++
(pouze samouk)
KIIV+42
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+2
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.–
Visual Studio C/C#/C++
(pouze samouk)
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, 47 hostů

Podobná vlákna

Třída object v c++ — založil Porcepoque

C# třída se štětcem — založil senol

Třída ve třídě, C++ — založil Luu

Moderátoři diskuze

 

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