Article View: pl.comp.lang.c
Article #309865Właściwości w C++ - takie potrzebne i proste ale czy ktoś to stosuje?!?
From: Szyk Cech
Date: Thu, 30 May 2019 14:26
Date: Thu, 30 May 2019 14:26
52 lines
2796 bytes
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
Technical Details
Message-ID:
<5KRHE.232451$0E1.199464@fx22.fr7>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!takemy.news.telefonica.de!telefonica.de!weretis.net!feeder7.news.weretis.net!newsreader4.netcologne.de!news.netcologne.de!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!fx22.fr7.POSTED!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!takemy.news.telefonica.de!telefonica.de!weretis.net!feeder7.news.weretis.net!newsreader4.netcologne.de!news.netcologne.de!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!fx22.fr7.POSTED!not-for-mail Newsgroups: pl.comp.lang.c X-Mozilla-News-Host: snews://newshosting.com:563 From: Szyk Cech <szykcech@spoko.pl> Subject: Właściwości w C++ - takie potrzebne i proste ale czy ktoś to stosuje?!? User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 Lines: 52 Message-ID: <5KRHE.232451$0E1.199464@fx22.fr7> X-Complaints-To: abuse(at)newshosting.com NNTP-Posting-Date: Thu, 30 May 2019 14:26:09 UTC Organization: Newshosting.com - Highest quality at a great price! www.newshosting.com Date: Thu, 30 May 2019 16:26:03 +0200 X-Received-Bytes: 2626 X-Received-Body-CRC: 2170442546 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit