🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #309865

Właściwości w C++ - takie potrzebne i proste ale czy ktoś to stosuje?!?

#309865
From: 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
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-mail

Show 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