...
ããŒã4.ã¯ã©ã¹
...
ãã®èšäºã¯ãGoogleã®C ++ã¹ã¿ã€ã«ã¬ã€ãã®äžéšããã·ã¢èªã«ç¿»èš³ãããã®ã§ãã
å ã®èšäºïŒgithubã®ãã©ãŒã¯ïŒã æŽæ°ããã翻蚳ã
ã¯ã©ã¹
ã¯ã©ã¹ã¯ãC ++ã®äž»èŠãªæ§æèŠçŽ ã§ãããããŠãã¡ããããããã¯ãã䜿ãããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ãã¯ã©ã¹ã䜿çšããéã«åŸãã¹ãåºæ¬çãªã«ãŒã«ãšçŠæ¢äºé ã«ã€ããŠèª¬æããŸãã
ã³ã³ã¹ãã©ã¯ã¿ãŒã®ã³ãŒã
ã³ã³ã¹ãã©ã¯ã¿ãŒã§ä»®æ³ã¡ãœãããåŒã³åºããªãã§ãã ããã倱æããå¯èœæ§ã®ããåæåã¯é¿ããŠãã ããïŒãšã©ãŒãéç¥ããæ¹æ³ã¯ãããŸãããæ³šïŒGoogleã¯äŸå€ã奜ãŸãªãããšã«æ³šæããŠãã ããïŒã
å®çŸ©
äžè¬ã«ãåæåã¯ãã¹ãŠã³ã³ã¹ãã©ã¯ã¿ãŒã§å®è¡ã§ããŸãïŒã€ãŸãããã¹ãŠã®åæåã¯ã³ã³ã¹ãã©ã¯ã¿ãŒã§å®è¡ã§ããŸãïŒã
ããã
- åæåãããŠããªãã¯ã©ã¹ã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸããã
- ã³ã³ã¹ãã©ã¯ã¿ãŒã§å®å šã«åæåããããªããžã§ã¯ãã¯constã«ããããšãã§ããæšæºã®ã³ã³ãããŒãã¢ã«ãŽãªãºã ã§ãç°¡åã«äœ¿çšã§ããŸãã
察
- ä»®æ³é¢æ°ãã³ã³ã¹ãã©ã¯ã¿ãŒã§åŒã³åºãããå ŽåãæŽŸçã¯ã©ã¹ããã®å®è£ ã¯åŒã³åºãããŸãããçŸåšã¯ã©ã¹ã«åäŸãããªãå Žåã§ããããã¯å°æ¥åé¡ã«ãªãå¯èœæ§ããããŸãã
- ( ) ( ).
- , ( â ) . : bool IsValid(). .
- . , , .
è©æ±º
ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ä»®æ³é¢æ°ãåŒã³åºããªãã§ãã ãããå Žåã«ãã£ãŠã¯ïŒèš±å¯ãããŠããå ŽåïŒãããã°ã©ã ã®çµäºã«ãã£ãŠèšèšãšã©ãŒãåŠçã§ããŸãããã以å€ã®å Žåã¯ããã¡ã¯ããªã¡ãœãããã¿ãŒã³ãæ€èšããããInitïŒïŒã䜿çšããŸã ïŒè©³çްã¯ãã¡ãïŒ TotWïŒ42ïŒãInitïŒïŒã¯ããªããžã§ã¯ãã«ç¹å®ã®ãããªãã¯é¢æ°ã®åŒã³åºããèš±å¯ããç¶æ ãã©ã°ãããå Žåã«ã®ã¿äœ¿çšããŠãã ãã ïŒéšåçã«æ§ç¯ããããªããžã§ã¯ããå®å šã«æäœããããšã¯é£ããããïŒã
æé»ã®å€æ
æé»ã®å€æã宣èšããªãã§ãã ãããå倿æŒç®åããã³åäžåŒæ°ã³ã³ã¹ãã©ã¯ã¿ãŒã«ã¯ãexplicitããŒã¯ãŒãã䜿çšã ãŸãã
å®çŸ©
æé»çãªå€æã«ãããdoubleãæåŸ ãã颿°ã«intåŒæ°ã æž¡ããªã©ãå¥ã®ã¿ã€ãïŒdestinationtypeïŒãæåŸ ãããå Žæã§1ã€ã®ãœãŒã¹ã¿ã€ãã®ãªããžã§ã¯ãã䜿çšã§ããŸã ã ããã°ã©ãã³ã°èšèªã§æå®ãããæé»çãªå€æã«å ããŠãã¯ã©ã¹å®£èšïŒãœãŒã¹ãšå®å ã®äž¡æ¹ïŒã«é©åãªã¡ã³ããŒã远å ããããšã«ãããç¬èªã®ã«ã¹ã¿ã 倿ãå®çŸ©ããããšãã§ããŸãããœãŒã¹åŽã®æé»çãªå€æã¯ãæŒç®å+ã¬ã·ãŒããŒã¿ã€ããšããŠå®£èšãããŸãïŒããšãã°ã
æŒç®åboolïŒïŒïŒãåä¿¡åŽã§ã®æé»çãªå€æã¯ãïŒããã©ã«ãã®åŒæ°ã«å ããŠïŒå¯äžã®åŒæ°ãšããŠãœãŒã¹ã¿ã€ãããšãã³ã³ã¹ãã©ã¯ã¿ãŒã«ãã£ãŠå®è£ ãããŸãã æç€ºçãª
ããŒã¯ãŒã ãã³ã³ã¹ãã©ã¯ã¿ãŒãŸãã¯å€ææŒç®åã«é©çšããŠãæç€ºçãªåã®äžèŽãããå Žåã«ã®ã¿é¢æ°ã䜿çšã§ããããšãæç€ºçã«ç€ºãããšãã§ããŸãïŒããšãã°ããã£ã¹ãæäœã®åŸïŒãããã¯ãæé»çãªå€æã ãã§ãªããC ++ 11ã®åæåãªã¹ãã«ãåœãŠã¯ãŸããŸãã
class Foo {
explicit Foo(int x, double y);
...
};
void Func(Foo f);
Func({42, 3.14}); //
ãã®ã³ãŒãäŸã¯ãæè¡çã«ã¯æé»çãªå€æã§ã¯ãããŸããããèšèªã¯ãããæç€ºçãªãã®ã§ãããã®ããã«æ±ã ãŸãã
ããã
- , .
- , string_view std::string const char*.
- .
- , ( ).
- , : , .
- , .
- explicit : , .
- , . â , .
- , , , .
è©æ±º
倿æŒç®åãšåäžåŒæ°ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãæç€ºçãªããŒã¯ãŒãã§å®£èšããå¿ èŠããããŸã ãäŸå€ããããŸããã³ããŒããã³ç§»åã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãæç€ºçã«å®£èšããªããŠã宣èšã§ããŸãã ã¿ã€ã倿ã¯å®è¡ããŸããããŸããä»ã®ã¿ã€ãã®ã©ãããŒã¯ã©ã¹ã®å Žåã¯ãæé»çãªå€æãå¿ èŠã«ãªãå ŽåããããŸãïŒãã®å Žåããã®éèŠãªã«ãŒã«ãç¡èŠããããã«ã¢ããã¹ããªãŒã 管çè ã«å¿ ãäŸé ŒããŠãã ããïŒã
åäžã®åŒæ°ã§åŒã³åºãããšãã§ããªãã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãæç€ºçãªããªãã§å®£èšã§ããŸã ãåäžã®æšæºãåãå ¥ããã³ã³ã¹ãã©ã¯ã¿ãŒ :: initializer_listãŸããã³ããŒã®åæåããµããŒãããã«ã¯ãæç€ºçã«å®£èšããå¿ èŠããã ãŸãïŒããšãã°ã MyType m = {1ã2};ïŒã
ã³ããŒå¯èœããã³åé 眮å¯èœãªã¿ã€ã
ã¯ã©ã¹ã®ãããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãã³ããŒããã³/ãŸãã¯ç§»åããããã¯ãã®éã®æ©èœãæç€ºçã«ç€ºãå¿ èŠãããããã¹ãŠãçŠæ¢ããŸãããããã®æäœãã¿ã€ãã«é©ããŠããå Žåã«ã®ã¿ãã³ããŒãç§»åããµããŒãããŠãã ããã
å®çŸ©
åé 眮å¯èœã¿ã€ãã¯ãäžæçãªå€ããåæåãŸãã¯å²ãåœãŠãããšãã§ããã¿ã€ãã§ãã
ã³ããŒå¯èœãªã¿ã€ã-å ã®ãªããžã§ã¯ãã倿ŽãããŠããªãå Žåã¯ãåãã¿ã€ãã®å¥ã®ãªããžã§ã¯ãïŒã€ãŸããåé 眮å¯èœãªãªããžã§ã¯ããšåãïŒããåæåãŸãã¯å²ãåœãŠãããšãã§ããŸããããšãã°ã std :: unique_ptr <int>ã¯åé 眮å¯èœã§ãããããã§ã¯ãããŸãããã³ããŒããã¿ã€ãïŒå ã®std :: unique_ptr <int>ãªããžã§ã¯ãã®å€ã¯ ãã¿ãŒã²ããã«å²ãåœãŠããããšãã«å€æŽããå¿ èŠãããããïŒã intããã³ std :: stringã¯ãã³ããŒãå¯èœãªåé 眮å¯èœã¿ã€ãã®äŸã§ããintã®å Žå ãç§»åæäœãšã³ããŒæäœã¯åãã§ã ãstd:: stringã®å Žåãç§»åæäœã«å¿ èŠãªãªãœãŒã¹ã¯ã³ããŒãããå°ãªããªããŸãã
ãŠãŒã¶ãŒå®çŸ©ã¿ã€ãã®å Žåãã³ããŒã¯ã³ããŒã³ã³ã¹ãã©ã¯ã¿ãŒãšã³ããŒæŒç®åã«ãã£ãŠæå®ãããŸããç§»åã¯ãç§»åæŒç®åã䜿çšããç§»åã³ã³ã¹ãã©ã¯ã¿ãŒã«ãã£ãŠæå®ãããããïŒååšããªãå Žåã¯ïŒå¯Ÿå¿ããã³ããŒé¢æ°ã«ãã£ãŠæå®ãããŸãã
ã³ããŒããã³ç§»åã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãããšãã°ããªããžã§ã¯ããå€ã§æž¡ããšãã«ãã³ã³ãã€ã©ãŒã«ãã£ãŠæé»çã«åŒã³åºãããšãã§ããŸãã
ããã
ã³ããŒå¯èœããã³åé 眮å¯èœãªã¿ã€ãã®ãªããžã§ã¯ãã¯ãå€ã«ãã£ãŠåãæž¡ãã§ãããããAPIãããåçŽã§ãããå®å šã§ãããçšéãåºããªããŸãããã®å Žåããªããžã§ã¯ãã®æææš©ããã®ã©ã€ããµã€ã¯ã«ãå€ã®å€æŽãªã©ã«åé¡ã¯ãªãããå¥çŽãã§ããããæå®ããå¿ èŠããããŸããïŒããã¯ãã¹ãŠããã€ã³ã¿ãŒãŸãã¯åç §ã«ãããªããžã§ã¯ãã®åãæž¡ããšã¯ç°ãªããŸãïŒãã¯ã©ã€ã¢ã³ããšå®è£ ã®éã®é å»¶éä¿¡ã鲿¢ãããã³ã³ãã€ã©ã«ããã³ãŒãã®çè§£ãä¿å®ãããã³æé©åãã¯ããã«å®¹æã«ãªããŸãããã®ãããªãªããžã§ã¯ãã¯ãå€ã®åãæž¡ããå¿ èŠãšããä»ã®ã¯ã©ã¹ïŒããšãã°ãã»ãšãã©ã®ã³ã³ãããŒïŒãžã®åŒæ°ãšããŠäœ¿çšã§ããäžè¬ã«ãããæè»æ§ããããŸãïŒããšãã°ãèšèšãã¿ãŒã³ã§äœ¿çšããå ŽåïŒã
ã³ããŒ/ç§»åã³ã³ã¹ãã©ã¯ã¿ãŒããã³é¢é£ããå²ãåœãŠæŒç®åã¯ãéåžžãCloneïŒïŒã CopyFromïŒïŒããŸãã¯SwapïŒïŒãªã©ã® ä»£æ¿ææ®µãããå®çŸ©ãç°¡å ã§ããã³ã³ãã€ã©ã¯ãå¿ èŠãªé¢æ°ãçæã§ããŸãïŒæé»çãŸã㯠= defaultã䜿çšïŒããããïŒé¢æ°ïŒã¯å®£èšãç°¡åã§ããã¹ãŠã®ã¯ã©ã¹ã¡ã³ããŒã確å®ã«ã³ããŒãããŸããã³ã³ã¹ãã©ã¯ã¿ãŒïŒã³ããŒãšç§»åïŒã¯ãäžè¬çã«ãããå¹ççã§ããã¡ã¢ãªã®å²ãåœãŠãåå¥ã®åæåã远å ã®å²ãåœãŠãå¿ èŠãšãããååã«æé©åãããŠããŸãïŒã³ããŒã®åé€ãåç § ïŒã
ç§»åæŒç®åã䜿çšãããšããªããžã§ã¯ãã®å³èŸºå€ãªãœãŒã¹ãå¹ççã«ïŒããã³æé»çã«ïŒæäœã§ããŸããããã«ãããã³ãŒãã£ã³ã°ã容æã«ãªãå ŽåããããŸãã ããã€ãã®ã¿ã€ãã¯ãçŽæçã§ãããããŸãã¯ééã£ãåäœãåŒãèµ·ããå¯èœæ§ã®ããæäœãã³ããŒããããã®ã³ããŒå¯èœãããã³ãµããŒãããŠããå¿ èŠã¯ãããŸãããã·ã³ã°ã«ããŒã³ã®ã¿ã€ãïŒ RegisterïŒãã¯ãªãŒãã³ã°çšã®ãªããžã§ã¯ãïŒããšãã°ãã¹ã³ãŒãå€ã«åºããšãïŒïŒCleanupïŒããŸãã¯äžæã®ããŒã¿ãå«ããªããžã§ã¯ã ïŒ MutexïŒã¯ããã®æå³ã§ã³ããŒã§ããŸããããŸããåå«ãæã€åºæ¬ã¯ã©ã¹ã®ã³ããŒæäœã¯ããªããžã§ã¯ãã®ã¹ã©ã€ã¹ã«ã€ãªããå¯èœæ§ããã ãŸã
..ãããã©ã«ãã®ïŒãŸãã¯èšè¿°ãäžååãªïŒã³ããŒæäœã¯ãæ€åºãå°é£ãªãšã©ãŒã«ã€ãªããå¯èœæ§ããããŸãã
ã³ããŒã³ã³ã¹ãã©ã¯ã¿ãŒã¯æé»çã«åŒã³åºãããããã¯èŠèœãšãããã¡ã§ãïŒç¹ã«ããªããžã§ã¯ããåç §ã«ãã£ãŠæž¡ãããèšèªã§ä»¥åã«äœæããããã°ã©ããŒã®å ŽåïŒãäžèŠãªã³ããŒãäœæããŠããã©ãŒãã³ã¹ãäœäžãããããšãã§ããŸãã
è©æ±º
åã¯ã©ã¹ã®ãããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã¯ããµããŒãããã³ããŒããã³/ãŸãã¯ç§»åæäœãæç€ºçã«ç€ºãå¿ èŠããããŸããããã¯éåžžãå¿ èŠãªé¢æ°ã®æç€ºçãªå®£èšã®åœ¢åŒã§ããŸãã¯ããããåé€ãšããŠå®£èšããããšã«ãã£ãŠããããªãã¯ã»ã¯ã·ã§ã³ã§è¡ãããŸãã
ç¹ã«ãã³ããŒãããã¯ã©ã¹ã¯ãã³ããŒæäœãæç€ºçã«å®£èšããå¿ èŠããããŸããåé 眮å¯èœãªã¯ã©ã¹ã®ã¿ããç§»åæäœãæç€ºçã«å®£èšããå¿ èŠããããŸããã³ããŒäžå¯èœ/ç§»åäžå¯èœãªã¯ã©ã¹ã¯ãã³ããŒæäœãæç€ºçã«æåŠïŒ=åé€ïŒããå¿ èŠããã ãŸããå¿ é ã§ã¯ãããŸãããã4ã€ã®ã³ããŒããã³ç§»åæ©èœãã¹ãŠãæç€ºçã«å®£èšãŸãã¯åé€ããããšãã§ããŸããã³ããŒããã³/ãŸãã¯ç§»åæŒç®åãå®è£ ããå Žåã¯ã察å¿ããã³ã³ã¹ãã©ã¯ã¿ãŒãäœæããå¿ èŠããããŸãã
class Copyable {
public:
Copyable(const Copyable& other) = default;
Copyable& operator=(const Copyable& other) = default;
// (.. )
};
class MoveOnly {
public:
MoveOnly(MoveOnly&& other);
MoveOnly& operator=(MoveOnly&& other);
// . ( ) :
MoveOnly(const MoveOnly&) = delete;
MoveOnly& operator=(const MoveOnly&) = delete;
};
class NotCopyableOrMovable {
public:
//
NotCopyableOrMovable(const NotCopyableOrMovable&) = delete;
NotCopyableOrMovable& operator=(const NotCopyableOrMovable&)
= delete;
// (), :
NotCopyableOrMovable(NotCopyableOrMovable&&) = delete;
NotCopyableOrMovable& operator=(NotCopyableOrMovable&&)
= delete;
};
説æãããŠãã颿°ã®å®£èšãŸãã¯åé€ã¯ãæãããªå Žåã«ã¯çç¥ã§ããŸãã
- ã¯ã©ã¹ã«ãã©ã€ããŒãã»ã¯ã·ã§ã³ïŒããšãã°ãæ§é äœãŸãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã¯ã©ã¹ïŒãå«ãŸããŠããªãå Žåãã³ããŒå¯èœæ§ãšåé 眮ã¯ãä»»æã®ãããªãã¯ã¡ã³ããŒã®åæ§ã®ããããã£ãä»ããŠå®£èšã§ããŸãã
- , . , , .
- , () /, / (.. ). / . .
éåžžã®ããã°ã©ããŒããããã®æäœã®å¿ èŠæ§ãçè§£ããŠããªãéãããŸãã¯æäœãéåžžã«ãªãœãŒã¹ãšããã©ãŒãã³ã¹ã倧éã«æ¶è²»ããå Žåãé€ããŠãåãã³ããŒå¯èœ/åé 眮å¯èœãšããŠå®£èšããªãã§ãã ãããã³ããŒãããã¿ã€ãã®ç§»åæäœã¯åžžã«ããã©ãŒãã³ã¹ã®æé©åã§ãããäžæ¹ã§ããã°ãè€éãã®æœåšçãªåå ã«ãªããŸãããããã£ãŠãã³ããŒãããããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããªãéããç§»åæäœã宣èšããªãã§ãã ãããäžè¬ã«ãããã©ã«ãã®ã³ããŒé¢æ°ã䜿çšãããããã«ãã¹ãŠãèšèšããããšãæãŸããã§ãïŒã¯ã©ã¹ã«å¯ŸããŠã³ããŒæäœã宣èšãããŠããå ŽåïŒããŸããããã©ã«ãã§ã¯ãæäœã®æ£ç¢ºããå¿ ã確èªããŠãã ããã
ãã¹ã©ã€ã¹ãã®ãªã¹ã¯ããããããåºæ¬ã¯ã©ã¹ãšããŠäœ¿çšããäºå®ã®ã¯ã©ã¹ïŒããã³ãã®ãããªé¢æ°ãæã€ã¯ã©ã¹ããç¶æ¿ããªãããšãæãŸããïŒã®ãããªãã¯ã³ããŒããã³ç§»åæŒç®åã¯é¿ããããšãæãŸããã§ããåºæ¬ã¯ã©ã¹ãã³ããŒå¯èœã«ããå¿ èŠãããå Žåã¯ããããªãã¯ä»®æ³é¢æ° CloneïŒïŒãšä¿è·ãããã³ããŒã³ã³ã¹ãã©ã¯ã¿ãŒãäœæããŠã掟çã¯ã©ã¹ããããã䜿çšããŠã³ããŒæäœãå®è£ ã§ããããã«ããŸãã
æ§é ãšã¯ã©ã¹
æ§é ïŒstructïŒã¯ãããŒã¿ãæ ŒçŽããããã·ããªããžã§ã¯ãã«ã®ã¿äœ¿çšããŠãã ãã ããã以å€ã®å Žåã¯ãã¯ã©ã¹ïŒclassïŒã䜿çšããŸã ã struct
ããŒã¯ãŒããš classããŒã¯ãŒã㯠ãC ++ã§ã¯ã»ãšãã©åãã§ãããã ããããŒã¯ãŒãããšã«ç¬èªã®çè§£ããããŸãã®ã§ãç®çãæå³ã«åã£ããã®ã䜿çšããŠãã ããã
æ§é ã¯ãããŒã¿è»¢éã«ã®ã¿ãããã·ããªããžã§ã¯ãã«äœ¿çšããå¿ èŠããããŸãããããã¯ç¬èªã®å®æ°ãæã€ããšãã§ããŸãããæ©èœããã£ãŠã¯ãªããŸããïŒget / set颿°ãé€ããŠïŒããã¹ãŠã®ãã£ãŒã«ãã¯ãããªãã¯ã§ãããçŽæ¥ã¢ã¯ã»ã¹ã§ããå¿ èŠããããŸããããã¯ãget / set颿°ã䜿çšãããããæãŸããæ¹æ³ã§ããæ§é ã«ã¯ãæ§é ã®ç°ãªããã£ãŒã«ãéã®äŸåé¢ä¿ã«åºã¥ãäžå€æ¡ä»¶ïŒèšç®å€ãªã©ïŒãå«ããªãã§ãã ããããã£ãŒã«ããçŽæ¥å€æŽããæ©èœã¯ãäžå€æ¡ä»¶ãç¡å¹ã«ããå¯èœæ§ããããŸããã¡ãœããã¯æ§é ã®äœ¿çšãå¶éããã¹ãã§ã¯ãããŸãããããã£ãŒã«ãã«å€ãå²ãåœãŠãããšãã§ããŸãïŒã€ãŸãã³ã³ã¹ãã©ã¯ã¿ãŒããã¹ãã©ã¯ã¿ããŸãã¯é¢æ°ãšã㊠InitializeïŒïŒã ResetïŒïŒã
ããŒã¿åŠçãŸãã¯äžå€æ¡ä»¶ã§è¿œå ã®æ©èœãå¿ èŠãªå Žåã¯ãã¯ã©ã¹ïŒclassïŒã䜿çšããããšããå§ãããŸã ããŸããäœãéžæãããããããªãå Žåã¯ãã¯ã©ã¹ã䜿çšããŠãã ããã STLãšã®äžè²«æ§ãä¿ã€ããã«ã
å Žåã«ãã£ãŠã¯ïŒ ãã³ãã¬ãŒãã®ã¡ã¿é¢æ°ãç¹æ§ãäžéšã®æ©èœïŒãã¯ã©ã¹ã®ä»£ããã«æ§é ã䜿çšã§ããŸãã
æ§é ãšã¯ã©ã¹ã®å€æ°ã« ã¯ç°ãªãã¹ã¿ã€ã«ã§ååãä»ããããŠããããšã«æ³šæããŠãã ããã
æ§é ãšãã¢ããã³ã¿ãã«
ããŒã¿ãããã¯å ã®åã ã®èŠçŽ ã«æå³ã®ããååãä»ããããšãã§ããå Žåã¯ããã¢ãã¿ãã«ã®ä»£ããã«æ§é ã䜿çšããããšãæãŸããã§ãã
䜿çšããŠãã¢ãšã¿ãã«ããšãåé¿ããã«ã¯ãç¬èªã®åãæã€è»èŒªã®åçºæããããªãã®æéãããããä¿åãããŸãã æžã蟌ã¿ã³ãŒããæå³ã®ããååãæã€ãã£ãŒã«ãïŒä»£ããã® 1次åãã .secondããŸã㯠STD :: GET <X> ïŒããããšã容æã«ãªããŸãèªãã§ããšãã« èªãã§ã³ãŒããããŸããC ++ 14ã¯ãã€ã³ããã¯ã¹ã¢ã¯ã»ã¹ã«å ããŠãã¿ãã«ã®ã¿ã€ãã¢ã¯ã»ã¹ïŒstd :: get <Type>ã§ãããã¿ã€ãã¯äžæã§ããå¿ èŠããããŸãïŒã远å ããŸã ãããã£ãŒã«ãåã¯ã¿ã€ããããã¯ããã«æçã§ãã
ãã¢ãšã¿ãã«ã¯ããã¢ãŸãã¯ã¿ãã«ã®èŠçŽ éã«ç¹å¥ãªåºå¥ããªãã³ãŒãã§é©åã§ãããŸããæ¢åã®ã³ãŒããŸãã¯APIãæäœããå¿ èŠããããŸãã
ç¶æ¿
å€ãã®å Žåãã¯ã©ã¹æ§æã¯ç¶æ¿ãããé©åã§ããç¶æ¿ã䜿çšããå Žåã¯ã å ¬éããŸãã
å®çŸ©å
ã¯ã©ã¹ãåºæ¬ã¯ã©ã¹ããç¶æ¿ããå Žåãåºæ¬ã¯ã©ã¹ããã®ãã¹ãŠã®ããŒã¿ãšæäœã®å®çŸ©ãå«ãŸããŸãããã€ã³ã¿ãŒãã§ã€ã¹ã®ç¶æ¿ãã¯ãçŽç²ãªæœè±¡åºæ¬ã¯ã©ã¹ããã®ç¶æ¿ã§ãïŒç¶æ ãã¡ãœããã¯å®çŸ©ãããŠããŸããïŒããã以å€ã¯ãã¹ãŠãå®è£ ã®ç¶æ¿ãã§ãã
ããã
å®è£ ã®ç¶æ¿ã«ãããåºæ¬ã¯ã©ã¹ïŒæ°ããã¯ã©ã¹ã®äžéšã«ãªãïŒã®äžéšãåå©çšããããšã«ãããã³ãŒããµã€ãºãåæžãããŸãããªããªãç¶æ¿ã¯ã³ã³ãã€ã«æã®å®£èšã§ãããã³ã³ãã€ã©ãæ§é ãçè§£ããŠãšã©ãŒãèŠã€ããããšãå¯èœã«ããŸããã€ã³ã¿ãŒãã§ã€ã¹ã®ç¶æ¿ã䜿çšããŠãã¯ã©ã¹ã§å¿ èŠãªAPIããµããŒãããããšãã§ããŸãããŸããã¯ã©ã¹ãç¶æ¿ãããAPIã®å¿ èŠãªã¡ãœãããå®çŸ©ããŠããªãå Žåãã³ã³ãã€ã©ã¯ãšã©ãŒãèŠã€ããããšãã§ããŸãã
çæ
å®è£ ã®ç¶æ¿ã®å Žåãã³ãŒãã¯åºæ¬ã¯ã©ã¹ãšåã¯ã©ã¹ã®éã§ãããŸãã«ãªãå§ããããã«ããã³ãŒãã®çè§£ãè€éã«ãªãå¯èœæ§ããããŸãããŸããåã¯ã©ã¹ã¯éä»®æ³é¢æ°ã®ã³ãŒãããªãŒããŒã©ã€ãã§ããŸããïŒå®è£ ã倿Žã§ããŸããïŒã
è€æ°ã®ç¶æ¿ã¯ããã«åé¡ããããããã©ãŒãã³ã¹ã®äœäžã«ã€ãªããå ŽåããããŸããå€ãã®å Žåãåäžã®ç¶æ¿ããè€æ°ã®ç¶æ¿ã«ç§»è¡ãããšãã®ããã©ãŒãã³ã¹ã®äœäžã¯ãéåžžã®æ©èœããä»®æ³æ©èœãžã®ç§»è¡ããã倧ãããªãå¯èœæ§ããããŸãããŸããè€æ°ã®ç¶æ¿ããè±åœ¢ã®ç¶æ¿ãžã®1ã€ã®ã¹ãããããããããã¯ãã§ã«ãããŸãããæ··ä¹±ããããŠãã¡ãããã°ã«ã€ãªãããŸãã
è©æ±º
ãã¹ãŠã®ç¶æ¿ã¯ãããªãã¯ã§ãªããã°ãªããŸãã ããã©ã€ããŒãã«ãããå Žåã¯ãåºæ¬ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã䜿çšããŠæ°ããã¡ã³ããŒã远å ããããšããå§ãã ãŸãã
å®è£ ã®ç¶æ¿ã䜿ããããªãã§ãã ãããã¯ã©ã¹æ§æããã°ãã°å¥œãŸããŸããç¶æ¿ã®ã»ãã³ãã£ã¯ã¹ã®äœ¿çšãå¶éããããã«ããŠãã ããã»ã§ãïŒ ããŒã¯ãããªããç¶æ¿ããããšãã§ããŸã Fooã®ç§ã¯ãšèšãå¯èœæ§ãããå Žåã ããŒã¯ã»㧠ã¯FooïŒããªãã¡ã䜿çšå Žæ ã¯Fooããããªãã䜿çšã§ãã ããŒïŒã
ä¿è·ïŒ ä¿è·ãïŒã¯ãåã¯ã©ã¹ã§äœ¿çšã§ããã¯ãã®æ©èœã®ã¿ãå®è¡ããŸããããŒã¿ã¯ãã©ã€ããŒãã§ãªããã°ãªããªãããšã«æ³šæããŠãã ãã ã
ãªãŒããŒã©ã€ããŸãã¯ïŒå¿ èŠã«å¿ããŠïŒ finalã®ããããã®æå®åã䜿çšããŠãä»®æ³é¢æ°/ãã¹ãã©ã¯ã¿ã®ãªãŒããŒã©ã€ããæç€ºçã«å®£èšããŸã ã颿°ããªãŒããŒã©ã€ããããšãã¯ãä»®æ³æå®åã䜿çšããªãã§ãã ãã ã説æïŒoverrideãŸã㯠finalãšããŒã¯ãããŠãããä»®æ³ã§ã¯ãªã颿°ãŸãã¯ãã¹ãã©ã¯ã¿ ã¯ãåã«ã³ã³ãã€ã«ãããŸããïŒããã¯äžè¬çãªãšã©ãŒããã£ããããã®ã«åœ¹ç«ã¡ãŸãïŒããŸããæå®åã¯ããã¥ã¡ã³ãã®ããã«æ©èœããŸãããŸããæå®åããªãå Žåãããã°ã©ããŒã¯éå±€å šäœããã§ãã¯ããŠã颿°ã®ä»®æ³æ§ãæç¢ºã«ããå¿ èŠããããŸãã
è€æ°ã®ç¶æ¿ãèš±å¯ãããŠããŸãããè€æ°ã®ç¶æ¿ äžèšã§èšãã°ãå®è£ ã¯ãŸã£ãããå§ãã§ããŸããã
ãªãã¬ãŒã¿ãŒã®éè² è·
ãªãã¬ãŒã¿ãŒãå¯èœãªéãåççã«ãªãŒããŒããŒãããŸããã«ã¹ã¿ã ãªãã©ã«ã¯äœ¿çšããªãã§ãã ããã C ++ã³ãŒãã
決å®
ãããšããŠãŒã¶ãŒã¯ãããŒã¯ãŒãæŒç®åãšãŠãŒã¶ãŒã¿ã€ãããã©ã¡ãŒã¿ãŒã®1ã€ãšããŠäœ¿çšããŠãçµã¿èŸŒã¿æŒç®åã ãªãŒããŒã©ã€ãã§ã ãŸãããŸãã æŒç®åã䜿çšãããšãæŒç®å ""ã䜿çšããŠæ°ãããªãã©ã«ãå®çŸ©ã§ããŸã ãæŒç®åboolïŒïŒã®ãããªãã£ã¹ã颿°ãäœæããããšãã§ããŸã ã ããã
ãŠãŒã¶ãŒå®çŸ©åïŒçµã¿èŸŒã¿åãšåæ§ïŒã«æŒç®åã®ãªãŒããŒããŒãã䜿çšãããšãã³ãŒããããç°¡æœã§çŽæçã«ããããšãã§ããŸãããªãŒããŒããŒããããæŒç®åã¯ç¹å®ã®æäœïŒããšãã°ã ==ã <ã =ã <<ïŒã«å¯Ÿå¿ããã³ãŒãããããã®æäœãé©çšããããžãã¯ã«åŸã£ãŠããå ŽåããŠãŒã¶ãŒå®çŸ©ã®åãããæç¢ºã«ãããããã®æäœã«äŸåããå€éšã©ã€ãã©ãªãæäœãããšãã«äœ¿çšã§ããŸãã
ã«ã¹ã¿ã ãªãã©ã«ã¯ãã«ã¹ã¿ã ãªããžã§ã¯ããäœæããããã®éåžžã«å¹ççãªæ¹æ³ã§ãã
察
- (, ) â , , .
- , .
- , , .
- , , .
- , .
- / ( ), «» . , foo < bar &foo < &bar; .
- . & , . &&, || , () ( ) .
- , . , .
- (UDL) , C++ . : «Hello World»sv std::string_view(«Hello World»). , .
- ãªããªã UDLã«åååãæå®ãããŠããªãå Žåã¯ãusing-directiveïŒçŠæ¢ãããŠããŸãïŒãŸãã¯using-declarationïŒã€ã³ããŒããããååãããããŒãã¡ã€ã«ã«ç€ºãããŠããã€ã³ã¿ãŒãã§ã€ã¹ã®äžéšã§ãªãéããïŒããããŒãã¡ã€ã«ã§ãïŒçŠæ¢ãããŠããŸãïŒã䜿çšããå¿ èŠããããŸãããã®ãããªããããŒãã¡ã€ã«ã®å ŽåãUDLãµãã£ãã¯ã¹ãåé¿ããã®ãæåã§ãããããããŒãã¡ã€ã«ãšãœãŒã¹ãã¡ã€ã«ã§ç°ãªããªãã©ã«éã®äŸåé¢ä¿ãåé¿ããããšãæãŸããã§ãã
è©æ±º
ãªãŒããŒããŒããããæŒç®åã¯ããã®æå³ãæçœã§æç¢ºã§ãããäžè¬çãªããžãã¯ãšäžèŽããŠããå Žåã«ã®ã¿å®çŸ©ããŠãã ãããããšãã°ã|ã䜿çšããŸã ORæäœã®æå³ã§; 代ããã«ãã€ãããžãã¯ãå®è£ ããããšã¯ãå§ãã§ããŸããã
ç¬èªã®ã¿ã€ãã«å¯ŸããŠã®ã¿æŒç®åãå®çŸ©ããåãããããŒãšãœãŒã¹ãã¡ã€ã«ãããã³åãåååã§å®çŸ©ããŸãããã®çµæãæŒç®åã¯ã¿ã€ãèªäœãšåãå Žæã§äœ¿çšã§ããããã«ãªããè€æ°ã®å®çŸ©ã®ãªã¹ã¯ãæå°éã«æããããŸããå¯èœãªéããæŒç®åããã³ãã¬ãŒããšããŠå®çŸ©ããããšã¯é¿ããŠãã ããããã³ãã¬ãŒãåŒæ°ã®ä»»æã®ã»ããã«äžèŽããå¿ èŠããããŸããæŒç®åãå®çŸ©ããå Žåã¯ããã®æŒç®åã«ããå åŒããå®çŸ©ããŸãããããŠã圌ããè¿ãçµæã®äžè²«æ§ã«æ³šæããŠãã ãããããšãã°ãæŒç®å<ãå®çŸ©ããå Žåã¯ã ãã¹ãŠã®æ¯èŒæŒç®åãå®çŸ©ãã<æŒç®åãš >æŒç®å ãåãåŒæ°ã«å¯ŸããŠtrueãè¿ããªãããã«ããŸãã
äžå€ã®ãã€ããªæŒç®åãå€éšé¢æ°ïŒéã¡ã³ããŒïŒãšããŠå®çŸ©ããããšãæãŸããã§ãããã€ããªæŒç®åãã¯ã©ã¹ã®ã¡ã³ããŒãšããŠå®£èšãããŠããå Žåãæé»ã®å€æã¯å³ã®åŒæ°ã«é©çšã§ããŸãããå·Šã®åŒæ°ã«ã¯é©çšã§ããŸãããããã¯ãïŒããšãã°ïŒã³ãŒãa <bãã³ã³ãã€ã«ãããããb <aãã³ã³ãã€ã« ãããªãå Žåãããã°ã©ããŒã«ãšã£ãŠå°ãã€ã©ã€ã©ããå¯èœæ§ ããããŸãã
æŒç®åã®ãªãŒããŒã©ã€ãããã€ãã¹ããå¿ èŠã¯ãããŸãããæ¯èŒïŒãŸãã¯å²ãåœãŠãšåºå颿°ïŒãå¿ èŠãªå Žåã¯ãEqualsïŒïŒã CopyFromïŒïŒãããã³ã® 代ããã«==ïŒãŸã㯠=ãš <<ïŒãå®çŸ©ãã ããšããå§ãããŸãã PrintToïŒïŒãéã«ãå€éšã©ã€ãã©ãªãæŒç®åãæåŸ ããŠãããšããçç±ã ãã§ãæŒç®åãåå®çŸ©ããå¿ èŠã¯ãããŸãããããšãã°ãããŒã¿ã¿ã€ããäžŠã¹æ¿ããããšãã§ãããstd :: setã«ä¿åããå Žåã¯ãã«ã¹ã¿ã æ¯èŒé¢æ°ãäœæãã<æŒç®åã䜿çšããªãããš ããå§ãããŸã ã &&ã ||ã
äžæžãããªãã§ãã ãã ã ãïŒã«ã³ãïŒãŸãã¯åé ïŒãæŒç®å ""ãäžæžãããªãã§ãã ãã ãç¬èªã®æåãå°å ¥ããªãã§ãã ããã以åã«å®çŸ©ããããªãã©ã«ïŒæšæºã©ã€ãã©ãªä»¥éãå«ãïŒã䜿çšããªãã§ãã ããã
è¿œå æ å ±ïŒ
ã¿ã€ã倿ã«ã€ããŠã¯ãæé»çãªå€æã®ã»ã¯ã·ã§ã³ã§èª¬æããŠã ãŸãã=æŒç®å ã¯ãã³ããŒã³ã³ã¹ãã©ã¯ã¿ã§èšè¿°ãã ãŸããã¹ããªãŒã ãæäœããããã®<<ã®ãªãŒããŒããŒãã®ãããã¯ã¯ ãã¹ããªãŒã ã§èª¬æãããŠã ãŸãããŸãã颿°ã®ãªãŒããŒããŒãã«é¢ããã»ã¯ã·ã§ã³ã®ã«ãŒã«ã«ã€ããŠãçè§£ã§ããŸã ãããã¯ããªãã¬ãŒã¿ãŒã«ãé©ããŠããŸãã
ã¯ã©ã¹ã¡ã³ããŒãžã®ã¢ã¯ã»ã¹
宿°ãé€ããŠãã¯ã©ã¹ããŒã¿ã¯åžžã« ãã©ã€ããŒãã«ã ãŸããããã«ãããæãåçŽãªïŒå€ãã®å Žå宿°ã®ïŒã¢ã¯ã»ã¹é¢æ°ã远å ãããäžå€æ¡ä»¶ã®äœ¿çšãç°¡çŽ åãããŸãã ãã¹ãã¯ã©ã¹ïŒããšãã°ãGoogle Testã䜿çšããå ŽåïŒãŸãã¯ä»ã®åæ§ã®ã±ãŒã¹ã§äœ¿çšããããã«ä¿è·ãããŠãããã®ãšããŠã¯ã©ã¹ããŒã¿ã宣èšããããšã¯èš±å¯ã ããŠããŸã ã
ã¢ããŠã³ã¹æé
åæ§ã®åºåã1ãæã«é 眮ããå ±éã®éšåãåãäžããŸãã
ã¯ã©ã¹å®çŸ©ã¯éåžžãpublicïŒã®ã»ã¯ã·ã§ã³ã§å§ãŸãã ããã« ä¿è·ãããŸãïŒã次㫠private ïŒã空ã®ã»ã¯ã·ã§ã³ãæå®ããªãã§ãã ããã
åã»ã¯ã·ã§ã³å ã§ãåæ§ã®å®£èšãã°ã«ãŒãåããŸããæšå¥šãããé åºã¯ãåïŒ typedefã usingããã¹ããããã¯ã©ã¹ããã³æ§é ãå«ãïŒã宿°ããã¡ã¯ããªã¡ãœãããã³ã³ã¹ãã©ã¯ã¿ãå²ãåœãŠæŒç®åããã¹ãã©ã¯ã¿ããã®ä»ã®ã¡ãœãããããŒã¿ã¡ã³ããŒã§ãã
ããã°ãã¡ãœããå®çŸ©ãã¯ã©ã¹å®çŸ©ã«é 眮ããªãã§ãã ãããéåžžãã¯ã©ã¹å®çŸ©ã«ã¯ãäºçްãªãéåžžã«çãããŸãã¯ããã©ãŒãã³ã¹ãéèŠãªã¡ãœããã®ã¿ããã€ã³ã©ã€ã³åããããŸããã€ã³ã©ã€ã³é¢æ°ãåç §ããŠãã ãã ã