Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #119571
| From | Andrey Tarasevich <andreytarasevich@hotmail.com> |
|---|---|
| Newsgroups | comp.lang.c++ |
| Subject | Re: How to implement Foo:swap |
| Date | 2024-06-29 10:43 -0700 |
| Organization | A noiseless patient Spider |
| Message-ID | <v5ph47$13e5$3@dont-email.me> (permalink) |
| References | (5 earlier) <v5nd4e$3hok3$1@dont-email.me> <v5omlq$3sdkp$1@raubtier-asyl.eternal-september.org> <v5p0m3$3u8rt$1@raubtier-asyl.eternal-september.org> <v5pb1t$3vvn7$2@dont-email.me> <v5pfst$14il$1@raubtier-asyl.eternal-september.org> |
On 06/29/24 10:22 AM, Bonita Montero wrote:
> Now it works:
>
> #include <iostream>
>
> using namespace std;
>
> template<typename T>
> struct Foo
> {
> private:
> T m_val;
> template<typename T2>
> friend void swap( Foo<T2> &lhs, Foo<T2> &rhs ) noexcept;
> };
>
> template<typename T>
> void swap( Foo<T> &lhs, Foo<T> &rhs ) noexcept
> {
> T t = lhs.m_val;
> lhs.m_val = rhs.m_val;
> rhs.m_val = t;
> }
>
> int main()
> {
> Foo<string> fsA, fsB;
> ::swap( fsA, fsB );
> }
>
> The only disadvantage with the code is that all swaps for different Ts /
> T2s can access the m_val in Foo.
>
> I've got no problem to inject a swap into std unless it is only
> specified for std't types.
Here it is. Now you finally managed to provide a in-class friend
declaration that properly matches the out-of-class definition.
* Firstly, this has a lot more syntactic clutter.
* Secondly, as you already noted, it grants unnecessary cross-friendship
(this second problem can be solved (by adding a bit more clutter).
Now compare it with mine
template<typename T>
struct Foo
{
private:
T m_val;
friend void swap(Foo &lhs, Foo &rhs) noexcept
{
T t = lhs.m_val;
lhs.m_val = rhs.m_val;
rhs.m_val = t;
}
};
This is a lot cleaner.
Now, I'm not a big fan of multiline in-class member definitions. But, as
I said above, this `swap` cannot be defined out-of-class. The language
has no syntax for it.
--
Best regards,
Andrey
Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
How to implement Foo:swap wij <wyniijj5@gmail.com> - 2024-06-28 01:42 +0800
Re: How to implement Foo:swap Bonita Montero <Bonita.Montero@gmail.com> - 2024-06-27 19:53 +0200
Re: How to implement Foo:swap Bonita Montero <Bonita.Montero@gmail.com> - 2024-06-27 19:57 +0200
Re: How to implement Foo:swap red floyd <no.spam.here@its.invalid> - 2024-06-27 14:02 -0700
Re: How to implement Foo:swap wij <wyniijj5@gmail.com> - 2024-06-28 08:51 +0800
Re: How to implement Foo:swap red floyd <no.spam.here@its.invalid> - 2024-06-27 21:46 -0700
Re: How to implement Foo:swap red floyd <no.spam.here@its.invalid> - 2024-06-27 21:53 -0700
Re: How to implement Foo:swap Andrey Tarasevich <andreytarasevich@hotmail.com> - 2024-06-28 11:04 -0700
Re: How to implement Foo:swap Paavo Helde <eesnimi@osa.pri.ee> - 2024-06-28 00:04 +0300
Re: How to implement Foo:swap Andrey Tarasevich <andreytarasevich@hotmail.com> - 2024-06-27 22:21 -0700
Re: How to implement Foo:swap Bonita Montero <Bonita.Montero@gmail.com> - 2024-06-28 10:16 +0200
Re: How to implement Foo:swap Andrey Tarasevich <andreytarasevich@hotmail.com> - 2024-06-28 09:33 -0700
Re: How to implement Foo:swap Bonita Montero <Bonita.Montero@gmail.com> - 2024-06-28 23:51 +0200
Re: How to implement Foo:swap Andrey Tarasevich <andreytarasevich@hotmail.com> - 2024-06-28 15:23 -0700
Re: How to implement Foo:swap Bonita Montero <Bonita.Montero@gmail.com> - 2024-06-29 12:12 +0200
Re: How to implement Foo:swap Bonita Montero <Bonita.Montero@gmail.com> - 2024-06-29 15:03 +0200
Re: How to implement Foo:swap Andrey Tarasevich <andreytarasevich@hotmail.com> - 2024-06-29 08:59 -0700
Re: How to implement Foo:swap Bonita Montero <Bonita.Montero@gmail.com> - 2024-06-29 19:04 +0200
Re: How to implement Foo:swap Andrey Tarasevich <andreytarasevich@hotmail.com> - 2024-06-29 10:27 -0700
Re: How to implement Foo:swap Bonita Montero <Bonita.Montero@gmail.com> - 2024-06-29 19:52 +0200
Re: How to implement Foo:swap "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2024-06-29 12:33 -0700
Re: How to implement Foo:swap "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2024-06-29 12:34 -0700
Re: How to implement Foo:swap Richard Damon <richard@damon-family.org> - 2024-06-29 16:13 -0400
Re: How to implement Foo:swap "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2024-06-29 13:52 -0700
Re: How to implement Foo:swap Bonita Montero <Bonita.Montero@gmail.com> - 2024-06-30 00:38 +0200
Re: How to implement Foo:swap "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2024-06-29 18:09 -0700
Re: How to implement Foo:swap Bonita Montero <Bonita.Montero@gmail.com> - 2024-06-29 19:22 +0200
Re: How to implement Foo:swap Andrey Tarasevich <andreytarasevich@hotmail.com> - 2024-06-29 10:43 -0700
Re: How to implement Foo:swap Bonita Montero <Bonita.Montero@gmail.com> - 2024-06-29 19:49 +0200
Re: How to implement Foo:swap Andrey Tarasevich <andreytarasevich@hotmail.com> - 2024-06-29 11:03 -0700
Re: How to implement Foo:swap Bonita Montero <Bonita.Montero@gmail.com> - 2024-06-29 20:08 +0200
Re: How to implement Foo:swap Andrey Tarasevich <andreytarasevich@hotmail.com> - 2024-06-29 11:24 -0700
Re: How to implement Foo:swap Bonita Montero <Bonita.Montero@gmail.com> - 2024-06-29 20:46 +0200
Re: How to implement Foo:swap Andrey Tarasevich <andreytarasevich@hotmail.com> - 2024-06-29 20:48 -0700
Re: How to implement Foo:swap Andrey Tarasevich <andreytarasevich@hotmail.com> - 2024-06-29 08:55 -0700
Re: How to implement Foo:swap Bonita Montero <Bonita.Montero@gmail.com> - 2024-06-29 19:05 +0200
Re: How to implement Foo:swap Andrey Tarasevich <andreytarasevich@hotmail.com> - 2024-06-29 10:35 -0700
Re: How to implement Foo:swap Andrey Tarasevich <andreytarasevich@hotmail.com> - 2024-06-29 09:15 -0700
Re: How to implement Foo:swap Marcel Mueller <news.5.maazl@spamgourmet.org> - 2024-07-15 20:33 +0200
Re: How to implement Foo:swap Andrey Tarasevich <andreytarasevich@hotmail.com> - 2024-07-15 20:04 -0700
Re: How to implement Foo:swap Marcel Mueller <news.5.maazl@spamgourmet.org> - 2024-07-20 13:19 +0200
Re: How to implement Foo:swap Andrey Tarasevich <andreytarasevich@hotmail.com> - 2024-07-20 20:18 -0700
csiph-web