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.)
Fórum › C / C++
Jak donutit překladeč vytvořit konstruktor
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;
}
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 :)
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).
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Jak nastavit kopírovací konstruktor jako friend? — založil Huge
Jak vytvorit .dll — založil jelleeeen
Jak vytvořit prstenec? — založil Vladimír
Jak vytvořit v PHP? — založil Daniel Herrmann
Jak vytvořit databazi — založil da11niel
Moderátoři diskuze