Portál AbcLinuxu, 25. dubna 2024 03:41


Dotaz: C++: move sémantika u bázové a odvozené třídy

7.2.2020 20:03 __blr__
C++: move sémantika u bázové a odvozené třídy
Přečteno: 458×
Odpovědět | Admin
Zdravím,

snažím se pochopit move sémantiku, r-value reference, ..

Pro příklad: Mám třídu JsonNode:
class JsonNode {
public:
    virtual ~JsonNode() {};
    virtual JsonNodeType get_type() = 0; 
};
a třídy dědící JsonNode: JsonArray, JsonObject, JsonNumber, ...

Teď bych potřeboval vytvořit třídu JsonPair, která bude spojovat JsonString a libovolnou třídu, která dědí JsonNode - je to pro implementaci JsonObject, kdy klíč je vždy string a hodnota je lib. datový typ JSON.

Pokud bych jel "postaru", tak bude JsonPair ukládat pointer JsonNode *. Do něj uložím co je potřeba a když budu s daty pracovat, tak si nejprve zjistím, co je to za typ a následně budu volat jednotlivé metody, které se budou lišit dle dat. typu.

Nyní bych chtěl tento problém řešit s využitím move semantiky - abych se nemusel o pointery Json objektů starat během přiřazování, řešit co s pointerem, kdy odkazovanou třídu využiju jinde (a nebo ne), kdy zavolat delete.

Move konstruktor a operátor přiřazení (&&) mám pro každou třídu hotový. Teď bych to potřeboval "napojit" v třídě JsonPair, kde může být víc jednotlivých tříd. A zde jsem se zasekl.

Můžete mi prosím zaslat nějaký návrh, jak toto vyřešit? Jde mi o pochopení, jak to funguje...

Díky moc!
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.2.2020 22:04 __blr__
Rozbalit Rozbalit vše Re: C++: move sémantika u bázové a odvozené třídy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Odpovím si sám: prostudovat Object Slicing, použít (smart) pointery...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.