🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Szyk Cech Thu, 30 May 2019 14:26
Właściwości w C++ - takie potrzebne i proste ale czy ktoś to stosuje?!?
#309865
Author: Szyk Cech
Date: Thu, 30 May 2019 14:26
52 lines
2796 bytes
Witam
Programując mostek z C++ do Qml-a wystawiający klasę z 10 zmiennych C++ 
wklepałem 300 linii kodu (bo w końcu w Qml jest dużo łatwiej). I naszła 
mnie refleksja, że już od C++98 można było implementować właściwości 
klas (tak jak np. w Dephi/C++ Builder). Postanowiłem się dziś zmierzyć z 
tematem i zakodowałem to, wynik tu:

https://github.com/SzykCech4/EnergoKodProperty/blob/master/Include/EnergoKodProperty/Property.h

Test tej klasy jest tu:

https://github.com/SzykCech4/EnergoKodProperty/blob/master/Tests/Src/Main.cpp

Cały projekt (czysty C++ budowany Cmake), tu:
https://github.com/SzykCech4/EnergoKodProperty.git

Zalety:
1. Da się.
2. Wydaje się działać prawidłowo w podstawowych zastosowaniach.

Wady:
1. Z jakichś podejrzanych powodów typ int jest lepiej traktowany niż 
std::string jeśli chodzi o dopasowywanie operatorów:

np. +=
To działa:
lObject.mIntProperty += 1;

A to już nie:
lObject.mStringProperty += std::string(" A to dopiero!!!");   // Failed 
with g++

Konieczne jest tu rzutowanie:
static_cast<std::string&>(lObject.mStringProperty) += " A to dopiero!!!";

Podobnie jest ze strumieniami <<:
To działa bez problemu:
std::cout << "Final int value: " << lObject.mIntProperty << std::endl;

A to już nie:
std::cout << "Final string value: " << lObject.mStringProperty << 
std::endl;    // Failed with g++

Konieczne jest takie rzutowanie:
std::cout << "Final string value: " << 
static_cast<std::string>(lObject.mStringProperty) << std::endl;

Jak ktoś ma pomysł jak rozwiązać problem dopasowywania operatorów dla 
std::string to zapraszam na github.com

pozdro
Szyk Cech
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads