.[ ČeskéHry.cz ].
Konverze vs konstruktor

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
frca



Založen: 28. 07. 2007
Příspěvky: 1554

PříspěvekZaslal: 10. duben 2024, 12:04:56    Předmět: Konverze vs konstruktor Odpovědět s citátem

Vstupní podmínky:
Mám třídu, která nesmí mít konstruktor (aby šla použít v unionu).
Chci implicitně konvertovat z typu float na tuto třídu. Nemůžu k tomu použít implicitní konstruktor (viz předchozí). Jde to nějak jinak?

Konverzní operátor je vhodný pro konvezi z mé třídy na float, ale ne opačně.
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
ladik-BigBoss



Založen: 28. 07. 2007
Příspěvky: 160

PříspěvekZaslal: 10. duben 2024, 15:42:22    Předmět: Odpovědět s citátem

chvili jsem s tim experimentoval a nenapada me jak na to;

zvazoval jsi pouziti std::variant ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 24. duben 2024, 18:46:37    Předmět: Odpovědět s citátem

IIUC, třída s konstruktorem jen zabrání, aby se automaticky vygeneroval konstruktor k tomu unionu. Ale pokud ho nepotřebuješ/napíšeš si ho sám, tak je vše OK.

kód:
class MyFloat {
public:
    MyFloat(float v) : f(v * v) {}

private:
    float f;
};

struct U {
    U() : mf(1.0f) {}
    union {
        MyFloat mf;
        float f;
    };
};

float Run() {
    U u;
    u.mf = 1.0;
    return u.f;
}

se přeloží v pohodě (clang 18.1).

Nebo potřebuješ ještě něco jiného?
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
frca



Založen: 28. 07. 2007
Příspěvky: 1554

PříspěvekZaslal: 25. duben 2024, 19:10:09    Předmět: Odpovědět s citátem

Já už jsem se na to vykašlal, dostudoval jsem důvody, proč to nejde...

FYI, šlo o sadu struktur, ve kterých byly floaty nahrazeny MyFloatem, a zároveň tyto struktury byly v unionu...
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 28. duben 2024, 19:41:14    Předmět: Odpovědět s citátem

Jasně.

Ale jinak jestli to chápu dobře, tak to by bylo taky v pohodě, jen bys musel definovat konstruktory na všech úrovních.
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
frca



Založen: 28. 07. 2007
Příspěvky: 1554

PříspěvekZaslal: 29. duben 2024, 21:14:26    Předmět: Odpovědět s citátem

OndraSej napsal:
Jasně.

Ale jinak jestli to chápu dobře, tak to by bylo taky v pohodě, jen bys musel definovat konstruktory na všech úrovních.


Určitě by to tak šlo, ale na to jsem moc líný Laughing
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna