Jak donutit překladeč vytvořit konstruktor – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Jak donutit překladeč vytvořit konstruktor – C / C++ – Fórum – Programujte.comJak donutit překladeč vytvořit konstruktor – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Huge0
Návštěvník
2. 12. 2007   #1
-
0
-

Sturučně: Jak donutit překladeč, aby podle celočíselného (int ccc) parametru šablony vytvořil konstruktor s ccc parametry (určitého typu stejného pro všechny param. fce.)?

Dlouze: Máme třídu bod, která je šablonová, jako parametr šablony přijímá počet rozměrů, tedy počet dimenzí, v kterých má být určen. Podle toho se vytvoří pole, kde bude určena jeho pozice. Nicméně nyní nastává drobný problém v konstruktoru.
Mohu samozřejmě udělat konstruktor, jehož parametrem je pole hodnot, které bodu přiřadím.
Nicméně to podmiňuje, aby uživatel třídy vytvářel zbytečné pole navíc.
Já chci mít konstruktor, jenž bude mít přesně takový počet jako je parametr šablony třídy bod. To znamená, že již v době překladu je znám počet i typ parametrů chtěného konstuktoru.

Nicméně neznám cestu, jak toto rozumně zaznamenat v syntaxi jazyka C/C++.
Jediná reálná možnost, jež mě napadla je výpustka (třítečka), jenže pak nemám kontrolu nad typem parametrů ani jejich počtem, což je docela smutné.
Víte-li někdo jak tuto strast vyřešit, napište.

(Na vytváření vlastních maker pro zavedení něčeho podobného se necítím.)

Nahlásit jako SPAM
IP: 88.102.203.–
Reklama
Reklama
Jonyzz0
Návštěvník
2. 12. 2007   #2
-
0
-

Nejdřív se mi to zdálo nemožné, ale pak jsem si vzpoměl na funkce s proměným počtem parametrů :



template<typename T, int size = 1>
class MyClass
{
private:
T m_data[size];
int m_size;

public:
MyClass(T a, ...)
{
m_size = size;
T* p = &a;
for(int i = 0; i < m_size; i++)
{
m_data[i] = *p;
p++;
}
};

void Show(std::ostream& os)
{
for(int i = 0; i < m_size; i++)
os << m_data[i] << " ";
};
};

int main()
{
MyClass<int, 3> a(1, 2, 3);
a.Show(std::cout);
return 0;
}

Nahlásit jako SPAM
IP: 62.40.69.–
Jonyzz0
Návštěvník
2. 12. 2007   #3
-
0
-

Jej, promiň teď jsem si teprve všimnul že to tou výpustkou nechceš dělat, no ale jiná možnost ti nejspíše nezbývá, nebo o ní alespoň nevím .

Nahlásit jako SPAM
IP: 62.40.69.–
sn3d0
Věrný člen
3. 12. 2007   #4
-
0
-

Da sa to ale je to dost advanced technika. Aspon podla mna technika ktora sa velmi casto nepouziva. Da sa to cez zoznamy. Podrobne popisane zoznamy a vsetky tie veciciky ohladom templates su super popisane v knihe "Moderni programovani v C++". Ked ma Jura nepredbehne ;) tak vecer tu hodim ukazku kodu.. Aj ked myslim ze sa mi to nepodary dobre vysvetlit na par riadkoch :)

Nahlásit jako SPAM
IP: 213.151.208.–
shutdown -h now
Huge0
Návštěvník
3. 12. 2007   #5
-
0
-

Jo, to by bylo celkom fajn, nebo pokud máš takovou možnost a není to zas tolik stránek, tak bys to mohl i nascanovat a poslat to třeba na mail nebo uploadovat (doufám, že teď nenabádám k nějakému strašlivému warezu, který by byl proti pravidlům tohoto fóra...)
Jinak advanced by nemusel být problém, už nejsem úplná lama (doufám).

Nahlásit jako SPAM
IP: 88.102.203.–
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, 53 hostů

Podobná vlákna

Jak vytvořit prstenec? — založil Vladimír

Jak vytvořit v PHP? — založil Daniel Herrmann

Jak vytvořit databazi — založil da11niel

Jak vytvorit .dll — založil jelleeeen

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ý