220 32822 <546143ae-5acd-4a0e-abde-4f712c51ca30@isocpp.org> article
Path: news.gmane.org!.POSTED!not-for-mail
From: wei zhang <lala.willzhang@gmail.com>
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: Re: std::enum
Date: Tue, 20 Jun 2017 21:12:43 -0700 (PDT)
Lines: 223
Approved: news@gmane.org
Message-ID: <546143ae-5acd-4a0e-abde-4f712c51ca30@isocpp.org>
References: <1cdd0fbf-c65d-4034-82d1-a84d4c4f6d1c@isocpp.org>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: blaine.gmane.org
Mime-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_1805_1313231126.1498018363948"
X-Trace: blaine.gmane.org 1498018365 9515 195.159.176.226 (21 Jun 2017 04:12:45 GMT)
X-Complaints-To: usenet@blaine.gmane.org
NNTP-Posting-Date: Wed, 21 Jun 2017 04:12:45 +0000 (UTC)
To: ISO C++ Standard - Future Proposals <std-proposals@isocpp.org>
Original-X-From: std-proposals+bncBDWIFSHO6EDBBPHEU7FAKGQEUHIURDY@isocpp.org Wed Jun 21 06:12:41 2017
Return-path: <std-proposals+bncBDWIFSHO6EDBBPHEU7FAKGQEUHIURDY@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-it0-f70.google.com ([209.85.214.70])
	by blaine.gmane.org with esmtp (Exim 4.84_2)
	(envelope-from <std-proposals+bncBDWIFSHO6EDBBPHEU7FAKGQEUHIURDY@isocpp.org>)
	id 1dNX0S-0002BD-4k
	for gclcip-std-proposals@m.gmane.org; Wed, 21 Jun 2017 06:12:40 +0200
Original-Received: by mail-it0-f70.google.com with SMTP id i71sf90996420itf.2
        for <gclcip-std-proposals@m.gmane.org>; Tue, 20 Jun 2017 21:12:45 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=isocpp-org.20150623.gappssmtp.com; s=20150623;
        h=date:from:to:message-id:in-reply-to:references:subject:mime-version
         :x-original-sender:reply-to:precedence:mailing-list:list-id
         :list-post:list-help:list-archive:list-subscribe:list-unsubscribe;
        bh=oEAWCPbrucaXtzCM29ZLs7mMuDIY5tA00Hb7HK1qewo=;
        b=F0OSyuUmCoa4SIldOcTWhu7AVfbHv5zhxC7YS6ArJDZ2LDGqUNveXkCy3K+xRiA2NJ
         9++cAxu7xZO5+GOfa/ynvcHsg8LeA9XvPmZzQEv/3gOTlSMnswv09Eo4QQxkgnBmJM0Y
         RZiU0VmY7fM4+4NeC1wIfsrKej2NhYtQJVxC8J1raQqASUP4TsyJt0OLBPaavKhLIfA9
         +LJf97rsnvmgHWk4+gtrOsvAvCfISkSr/YJECl3iVpRd5wCL5/pq+zLqglH2PMaEny4S
         +wnp2ytu0LO4VmYWowehiv2ijoHfYKgg6oQCCdB3maI7YcKcEseOCmU7BS1NswFmnyu0
         ja7g==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=date:from:to:message-id:in-reply-to:references:subject:mime-version
         :x-original-sender:reply-to:precedence:mailing-list:list-id
         :list-post:list-help:list-archive:list-subscribe:list-unsubscribe;
        bh=oEAWCPbrucaXtzCM29ZLs7mMuDIY5tA00Hb7HK1qewo=;
        b=eD0VPZomHTO54TAcbdHs/AlAI62/41mY2ZcAjkLBzPt9YF8sDZTX+HsMf7SWBeeEYR
         rjRnSQCHP2zjLYgm47O7JyyNBbZR5b04BQw0f0asKGqx4Cje5XY7ALeEGv+JqsdDp547
         ixi+20urUOopMN2IodutHN2u9IcFZTne3W/3x0gaUVewt42ahOwcezk+0TuKIZP8ozLJ
         I8CP+N1jPddTBwn6KvQzsuFPRkBwoXWgIeWxgZbaO809B3+FWRqcOEInD9PtZymoqamU
         mYc0zemaFr2fogMVlELNPkqSFHYqrq2wGkX7fWCPgEPuqqr0EGi7e+3/QzEiAAqgugcD
         tVvw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:date:from:to:message-id:in-reply-to:references
         :subject:mime-version:x-original-sender:reply-to:precedence
         :mailing-list:list-id:x-spam-checked-in-group:list-post:list-help
         :list-archive:list-subscribe:list-unsubscribe;
        bh=oEAWCPbrucaXtzCM29ZLs7mMuDIY5tA00Hb7HK1qewo=;
        b=Wmp+7pLpf7wq/WcGWPEwjuGoBTwFUFodlJEMv3BXXeoILto8ekWrD760mIEqxrBjFm
         82wWVbe59/CW9d1WsW8Ej8gX49bK8oM/4AQLgtys4Otbj/0uONlEPvPtPj16JNWSK2VG
         5q8pyywBh4Jaq6okg+/9A/eNf9JXGcgNDx5pXiysE0k5KzXyrUlW/nF0f0XNeHqhJJun
         iRIV5ioMWerSL0+z5dUxXyjjIw5nXAIF0U7okQKRKo8PS4pv+LmfG6kA+R8nyTX1Sxbo
         GNm7K1EkpCvAwfROduSFqbYoydqJeLSqE8RphIJNEobzA/n+H0XXV2cJUV9GEVQSAT1z
         aIww==
X-Gm-Message-State: AKS2vOxz+KnjlNAkCb9xigj32XSMm0d9XyaxP6o9WSH25/qgDekfQO6I
	b2J0kjs1zwBN0IVR
X-Received: by 10.107.205.4 with SMTP id d4mr13535858iog.22.1498018365144;
        Tue, 20 Jun 2017 21:12:45 -0700 (PDT)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.157.24.23 with SMTP id b23ls2329334ote.7.gmail; Tue, 20 Jun
 2017 21:12:44 -0700 (PDT)
X-Received: by 10.157.52.161 with SMTP id g30mr625730otc.17.1498018364419;
        Tue, 20 Jun 2017 21:12:44 -0700 (PDT)
In-Reply-To: <1cdd0fbf-c65d-4034-82d1-a84d4c4f6d1c@isocpp.org>
X-Original-Sender: lala.willzhang@gmail.com
Precedence: list
Mailing-list: list std-proposals@isocpp.org; contact std-proposals+owners@isocpp.org
List-ID: <std-proposals.isocpp.org>
X-Google-Group-Id: 399137483710
List-Post: <https://groups.google.com/a/isocpp.org/group/std-proposals/post>, <mailto:std-proposals@isocpp.org>
List-Help: <https://support.google.com/a/isocpp.org/bin/topic.py?topic=25838>, <mailto:std-proposals+help@isocpp.org>
List-Archive: <https://groups.google.com/a/isocpp.org/group/std-proposals/>
List-Subscribe: <https://groups.google.com/a/isocpp.org/group/std-proposals/subscribe>,
 <mailto:std-proposals+subscribe@isocpp.org>
List-Unsubscribe: <mailto:googlegroups-manage+399137483710+unsubscribe@googlegroups.com>,
 <https://groups.google.com/a/isocpp.org/group/std-proposals/subscribe>
Xref: news.gmane.org gmane.comp.lang.c++.isocpp.proposals:32822
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/32822>

------=_Part_1805_1313231126.1498018363948
Content-Type: multipart/alternative; 
	boundary="----=_Part_1806_864230015.1498018363949"

------=_Part_1806_864230015.1498018363949
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

I won't think it can be done with only add lib.
For the samething I would suggest enum class will have a static const=20
variable array.
so that you could write
const auto & e =3DColor.array




=E5=9C=A8 2017=E5=B9=B46=E6=9C=8821=E6=97=A5=E6=98=9F=E6=9C=9F=E4=B8=89 UTC=
+8=E4=B8=8A=E5=8D=8811:34:28=EF=BC=8CHalfdan Ingvarsson=E5=86=99=E9=81=93=
=EF=BC=9A
>
> I'd like to propose a simple, but very useful utility class for the=20
> standard library: std::enum. =20
>
> All it does is take a template parameter, which would be an enum type.
>
> It would then allow you to access the individual elements of that enum, i=
n=20
> order of declaration, using a nearly identical interface as std::array<>=
=20
> (i.e either through enumerators, or operator[]).
>
> E.g:=20
>
> #include <iostream>
> #include <enum>
> #include <algorithm>
>
>
> enum Color { Red =3D 1, Green =3D 2, Blue =3D 23 };
>
>
> int main()
> {
>    auto e =3D std::enum<Color>();
>    for( auto v: e)
>    {
>      std::cout << "Elem: " << v << "\n";
>    }
>    std::cout << "Size: " << e.size() << "\n";
>    std::cout << "Largest: " << std::max_element(e.begin(), e.end()) <<=20
> "\n";
>    return 0;
> }
>
> Output:
> Elem: 1
> Elem: 2
> Elem: 23
> Size: 3
> Largest: 23
>
> I assume that this would have to take some form of a help from the=20
> compiler, similar to how std::underlying_type is implemented. However, th=
is=20
> would obviate the current set of hacks that either require macros, specia=
l=20
> class constructions, or other inconvenient forms.
>
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/546143ae-5acd-4a0e-abde-4f712c51ca30%40isocpp.or=
g.

------=_Part_1806_864230015.1498018363949
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">I won&#39;t think it can be done with only add lib.<div>Fo=
r the samething I would suggest enum class will have a static const variabl=
e array.</div><div>so that you could write</div><div><div class=3D"prettypr=
int" style=3D"background-color: rgb(250, 250, 250); border-color: rgb(187, =
187, 187); border-style: solid; border-width: 1px; word-wrap: break-word;">=
<code class=3D"prettyprint"><div class=3D"subprettyprint"><font color=3D"#0=
00000"><span style=3D"color: #008;" class=3D"styled-by-prettify">const</spa=
n><span style=3D"color: #000;" class=3D"styled-by-prettify"> </span><span s=
tyle=3D"color: #008;" class=3D"styled-by-prettify">auto</span><span style=
=3D"color: #000;" class=3D"styled-by-prettify"> </span><span style=3D"color=
: #660;" class=3D"styled-by-prettify">&amp;</span><span style=3D"color: #00=
0;" class=3D"styled-by-prettify"> e </span><span style=3D"color: #660;" cla=
ss=3D"styled-by-prettify">=3D</span><span style=3D"color: #606;" class=3D"s=
tyled-by-prettify">Color</span><span style=3D"color: #660;" class=3D"styled=
-by-prettify">.</span><span style=3D"color: #000;" class=3D"styled-by-prett=
ify">array</span></font></div></code></div><br><br><div><br><br>=E5=9C=A8 2=
017=E5=B9=B46=E6=9C=8821=E6=97=A5=E6=98=9F=E6=9C=9F=E4=B8=89 UTC+8=E4=B8=8A=
=E5=8D=8811:34:28=EF=BC=8CHalfdan Ingvarsson=E5=86=99=E9=81=93=EF=BC=9A<blo=
ckquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-=
left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr">I&#39;d like to p=
ropose a simple, but very useful utility class for the standard library: st=
d::enum. =C2=A0<div><br></div><div>All it does is take a template parameter=
, which would be an enum type.</div><div><br></div><div>It would then allow=
 you to access the individual elements of that enum, in order of declaratio=
n, using a nearly identical interface as std::array&lt;&gt; (i.e either thr=
ough enumerators, or operator[]).</div><div><div><br></div><div>E.g:=C2=A0<=
/div><div><br></div><div style=3D"background-color:rgb(250,250,250);border-=
color:rgb(187,187,187);border-style:solid;border-width:1px;word-wrap:break-=
word"><code><div><span style=3D"color:#800">#include</span><span style=3D"c=
olor:#000"> </span><span style=3D"color:#080">&lt;iostream&gt;</span><span =
style=3D"color:#000"><br></span><span style=3D"color:#800">#include</span><=
span style=3D"color:#000"> </span><span style=3D"color:#080">&lt;enum&gt;</=
span><span style=3D"color:#000"><br></span><span style=3D"color:#800">#incl=
ude</span><span style=3D"color:#000"> </span><span style=3D"color:#080">&lt=
;algorithm&gt;</span><span style=3D"color:#000"><br><br><br></span><span st=
yle=3D"color:#008">enum</span><span style=3D"color:#000"> </span><span styl=
e=3D"color:#606">Color</span><span style=3D"color:#000"> </span><span style=
=3D"color:#660">{</span><span style=3D"color:#000"> </span><span style=3D"c=
olor:#606">Red</span><span style=3D"color:#000"> </span><span style=3D"colo=
r:#660">=3D</span><span style=3D"color:#000"> </span><span style=3D"color:#=
066">1</span><span style=3D"color:#660">,</span><span style=3D"color:#000">=
 </span><span style=3D"color:#606">Green</span><span style=3D"color:#000"> =
</span><span style=3D"color:#660">=3D</span><span style=3D"color:#000"> </s=
pan><span style=3D"color:#066">2</span><span style=3D"color:#660">,</span><=
span style=3D"color:#000"> </span><span style=3D"color:#606">Blue</span><sp=
an style=3D"color:#000"> </span><span style=3D"color:#660">=3D</span><span =
style=3D"color:#000"> </span><span style=3D"color:#066">23</span><span styl=
e=3D"color:#000"> </span><span style=3D"color:#660">};</span><span style=3D=
"color:#000"><br><br><br></span><span style=3D"color:#008">int</span><span =
style=3D"color:#000"> main</span><span style=3D"color:#660">()</span><span =
style=3D"color:#000"><br></span><span style=3D"color:#660">{</span><span st=
yle=3D"color:#000"><br>=C2=A0 =C2=A0</span><span style=3D"color:#008">auto<=
/span><span style=3D"color:#000"> e </span><span style=3D"color:#660">=3D</=
span><span style=3D"color:#000"> std</span><span style=3D"color:#660">::</s=
pan><span style=3D"color:#008">enum</span><span style=3D"color:#660">&lt;</=
span><span style=3D"color:#606">Color</span><span style=3D"color:#660">&gt;=
();</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0</span><span style=3D=
"color:#008">for</span><span style=3D"color:#660">(</span><span style=3D"co=
lor:#000"> </span><span style=3D"color:#008">auto</span><span style=3D"colo=
r:#000"> v</span><span style=3D"color:#660">:</span><span style=3D"color:#0=
00"> e</span><span style=3D"color:#660">)</span><span style=3D"color:#000">=
<br>=C2=A0 =C2=A0</span><span style=3D"color:#660">{</span><span style=3D"c=
olor:#000"><br>=C2=A0 =C2=A0 =C2=A0std</span><span style=3D"color:#660">::<=
/span><span style=3D"color:#000">cout </span><span style=3D"color:#660">&lt=
;&lt;</span><span style=3D"color:#000"> </span><span style=3D"color:#080">&=
quot;Elem: &quot;</span><span style=3D"color:#000"> </span><span style=3D"c=
olor:#660">&lt;&lt;</span><span style=3D"color:#000"> v </span><span style=
=3D"color:#660">&lt;&lt;</span><span style=3D"color:#000"> </span><span sty=
le=3D"color:#080">&quot;\n&quot;</span><span style=3D"color:#660">;</span><=
span style=3D"color:#000"><br>=C2=A0 =C2=A0</span><span style=3D"color:#660=
">}</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0std</span><span style=
=3D"color:#660">::</span><span style=3D"color:#000">cout </span><span style=
=3D"color:#660">&lt;&lt;</span><span style=3D"color:#000"> </span><span sty=
le=3D"color:#080">&quot;Size: &quot;</span><span style=3D"color:#000"> </sp=
an><span style=3D"color:#660">&lt;&lt;</span><span style=3D"color:#000"> e<=
/span><span style=3D"color:#660">.</span><span style=3D"color:#000">size</s=
pan><span style=3D"color:#660">()</span><span style=3D"color:#000"> </span>=
<span style=3D"color:#660">&lt;&lt;</span><span style=3D"color:#000"> </spa=
n><span style=3D"color:#080">&quot;\n&quot;</span><span style=3D"color:#660=
">;</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0std</span><span style=
=3D"color:#660">::</span><span style=3D"color:#000">cout </span><span style=
=3D"color:#660">&lt;&lt;</span><span style=3D"color:#000"> </span><span sty=
le=3D"color:#080">&quot;Largest: &quot;</span><span style=3D"color:#000"> <=
/span><span style=3D"color:#660">&lt;&lt;</span><span style=3D"color:#000">=
 std</span><span style=3D"color:#660">::</span><span style=3D"color:#000">m=
ax_element</span><span style=3D"color:#660">(</span><span style=3D"color:#0=
00">e</span><span style=3D"color:#660">.</span><span style=3D"color:#008">b=
egin</span><span style=3D"color:#660">(),</span><span style=3D"color:#000">=
 e</span><span style=3D"color:#660">.</span><span style=3D"color:#008">end<=
/span><span style=3D"color:#660">())</span><span style=3D"color:#000"> </sp=
an><span style=3D"color:#660">&lt;&lt;</span><span style=3D"color:#000"> </=
span><span style=3D"color:#080">&quot;\n&quot;</span><span style=3D"color:#=
660">;</span><span style=3D"color:#000"><br>=C2=A0 =C2=A0</span><span style=
=3D"color:#008">return</span><span style=3D"color:#000"> </span><span style=
=3D"color:#066">0</span><span style=3D"color:#660">;</span><span style=3D"c=
olor:#000"><br></span><span style=3D"color:#660">}</span></div></code></div=
><div><font face=3D"courier new, monospace"><br></font></div><div><font fac=
e=3D"arial, sans-serif">Output:</font></div><div style=3D"background-color:=
rgb(250,250,250);border-color:rgb(187,187,187);border-style:solid;border-wi=
dth:1px;word-wrap:break-word"><code><div><span style=3D"color:#606">Elem</s=
pan><span style=3D"color:#660">:</span><span style=3D"color:#000"> </span><=
span style=3D"color:#066">1</span><span style=3D"color:#000"><br></span><sp=
an style=3D"color:#606">Elem</span><span style=3D"color:#660">:</span><span=
 style=3D"color:#000"> </span><span style=3D"color:#066">2</span><span styl=
e=3D"color:#000"><br></span><span style=3D"color:#606">Elem</span><span sty=
le=3D"color:#660">:</span><span style=3D"color:#000"> </span><span style=3D=
"color:#066">23</span><span style=3D"color:#000"><br></span><span style=3D"=
color:#606">Size</span><span style=3D"color:#660">:</span><span style=3D"co=
lor:#000"> </span><span style=3D"color:#066">3</span><span style=3D"color:#=
000"><br></span><span style=3D"color:#606">Largest</span><span style=3D"col=
or:#660">:</span><span style=3D"color:#000"> </span><span style=3D"color:#0=
66">23</span></div></code></div><div><font face=3D"courier new, monospace">=
<br></font></div><div>I assume that this would have to take some form of a =
help from the compiler, similar to how std::underlying_type is implemented.=
 However, this would obviate the current set of hacks that either require m=
acros, special class constructions, or other inconvenient forms.</div></div=
><div><br></div></div></blockquote></div></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/546143ae-5acd-4a0e-abde-4f712c51ca30%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/546143ae-5acd-4a0e-abde-4f712c51ca30=
%40isocpp.org</a>.<br />

------=_Part_1806_864230015.1498018363949--

------=_Part_1805_1313231126.1498018363948--

.
