🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: [C++] Czy to jest lagalne?

#309552
From: bartekltg
Date: Fri, 29 Dec 2017 11:10
62 lines
2595 bytes
On Thursday, December 28, 2017 at 12:11:35 PM UTC+1, Wojciech Muła wrote:
> Normalne kompilatory (GCC 7/clang 5) nie protestują.
> Czy ten kod jest legalny? Chodzi o castowanie w capture().
> 
> --start--
> #include <string>
> 
> class Item {
> 
> protected:
> 	std::string a;
> };
> 
> class Builder: public Item {
> 	
> public:
> 	void set() {
> 		a = "foo";
> 	}
> 	
> 	Item&& capture() {
> 		return std::move(*this);
> 	}
> };
> 
> int main() {
> 
>     Builder b;
>     b.set();
> 
>     Item a = b.capture();
> }
> --stop--


Nie wiem ;>

Ale dlaczego chcesz miec metodą capture*), zamiast pisać:

int main() {
 
     Builder b;
     b.set();
 
     Item a = move(b);
 }

Zrbi dokładnie to samo, wiele więcej nie zajmuje,za to programista 
ma jedną warstewkę myślową mniej, bo widzi standardowe zaklęcie
zamiast pamiętać/sprawdzać, co robi capture.


Jakby musiuało być capture, pewnie bym pisał to tak, że
capture zwraca jakiś opiekt zawierający referencje do b,
a operatory przypisania/konstruktor dostając ten obiekt
robiłby move. Ale to trochę przekombinowane:)


*)zwłaszcza, że to obiekt a przechwytuje, nie b;-)

pzdr
bartekltg
Technical Details
Message-ID: <5edc726f-df6a-4e10-9456-7646574b8051@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer02.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!m31no3500232qtf.0!news-out.google.com!t48ni1225qtc.1!nntp.google.com!m31no3500227qtf.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <f928db02-1940-40f1-95e9-241cc8966ed7@googlegroups.com>

Show Full Headers
Complete Article Headers
X-Received: by 10.55.22.206 with SMTP id 75mr25058894qkw.20.1514545848205;        Fri, 29 Dec 2017 03:10:48 -0800 (PST)
X-Received: by 10.31.192.135 with SMTP id q129mr3161002vkf.0.1514545848086; Fri, 29 Dec 2017 03:10:48 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer02.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!m31no3500232qtf.0!news-out.google.com!t48ni1225qtc.1!nntp.google.com!m31no3500227qtf.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.c
Date: Fri, 29 Dec 2017 03:10:47 -0800 (PST)
In-Reply-To: <f928db02-1940-40f1-95e9-241cc8966ed7@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=80.54.0.14; posting-account=CvUQzQoAAABvVQmR58QmR6N4Cev1qhAS
NNTP-Posting-Host: 80.54.0.14
References: <f928db02-1940-40f1-95e9-241cc8966ed7@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <5edc726f-df6a-4e10-9456-7646574b8051@googlegroups.com>
Subject: Re: [C++] Czy to jest lagalne?
From: bartekltg <bartekltg@gmail.com>
Injection-Date: Fri, 29 Dec 2017 11:10:48 +0000
X-Received-Body-CRC: 2144221421
X-Received-Bytes: 2632
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit