Slide 1

Slide 1 text

JGDPOTUFYQSจ͸ ςϯϓϨʔτੈքͷϥϜμࣜͰ͋Δ ߴڮ থ "LJSB5BLBIBTIJ GBJUIBOECSBWF!HNBJMDPN 1SFGFSSFE/FUXPSLT *OD ۚ $.*9

Slide 2

Slide 2 text

ࣗݾ঺հ • 1SFGFSSFE/FUXPSLTࣾͰɺεʔύʔίϯϐϡʔλ./$PSF ͷιϑτ΢ΣΞΛ࡞͍ͬͯ·͢ • ΤϛϡϨʔλͱ͔Ξηϯϒϥͱ͔ͷ௿ϨΠϠʔͳ΋ͷΛ࡞ͬͯ·͢ • ೔ຊͷ$ඪ४ԽҕһձʹҰ࣌ظࢀՃ͍ͯ͠·ͨ͠ • $ͷ೔ຊޠϦϑΝϨϯεαΠτDQQSFGKQΛ࡞͍ͬͯ·͢ • ஶॻ • ʰ$ςϯϓϨʔτςΫχοΫʱ • ʰ$ϙέοτϦϑΝϨϯεʱ • ʰϓϩάϥϛϯάͷຐಋॻʱ • ࠓ೥͸$ͷೖ໳αΠτΛ࡞Γ͍ͨ

Slide 3

Slide 3 text

$ରԠͷ$ϙέϦ׬੒͠·ͨ͠ • ೥ʹ$൛Λग़൛ͯ͠ɺ վగΛ೥ଓ͚͍ͯ·͢ • ʮ΍Γ͍ͨ͜ͱʯ͔ΒʮͲ͏΍ͬͯʯ Λௐ΂ΔٯҾ͖ϦϑΝϨϯε • DQQSFGKQͱ͸໾ׂ͕ҟͳΔ • ষཱͯ΍આ໌ͷཻ౓͸ ݴޠɾஶऀ͝ͱʹ͕ͪ͏ • $ϙέϦ͸ɺදࢴͷΧδϡΞϧ͞ͱ ͕ͪͬͯɺॻ͖͗͢ͳ͘Β͍આ໌Λ ॻ͍͍ͯΔ

Slide 4

Slide 4 text

৘ใൃ৴Λ͠Α͏ • ఻ঝ͞Εͳ͍ٕज़͸ഇΕ͍ͯ͘ • ຊΛॻ͘ਓ͕૿͑ͯ΄͍͠ • ຊͰҰ൪͍ͨ΁Μͳͷ͸ɺॻ্͖͛Δ͜ͱ • ్தͰ౤͛ग़ͣ͞ɺ࠷ޙ·Ͱ࡞Γ্͛Δͷ͕Ұ൪͍ͩ͡ • ୯ൃهࣄͱ͕ͪͬͯɺຊ͸ • Ұ؏ੑ͋Δํ਑ͷ΋ͱɺ • ମܥతͳղઆΛఏڙ͠ɺ • ϨϏϡʔʹଟ͘ͷ࣌ؒΛ͔͚Δ ग़൛ޙʹमਖ਼͕Ͱ͖ͳ͍ ͜ͱ͕େ͖ͳՁ஋ • ग़൛ࣾͱͷڮ౉͠΍ϨϏϡʔͳͲڠྗ͠·͢

Slide 5

Slide 5 text

$ͰೖͬͨJGDPOTUFYQSจͷ͓࿩Ͱ͢ if constexpr (std::is_same_v) { // intに関する処理… } else { // それ以外の型の処理… } • JGDPOTUFYQSจ͸ɺίϯύΠϧ࣌৚݅ʹΑΔ৚݅෼ذͰ͢ • ֘౰͠ͳ͔ͬͨํͷ෼ذίʔυ͸ɺόΠφϦʹؚ·Ε·ͤΜ

Slide 6

Slide 6 text

ͱ͜ΖͰɺςϯϓϨʔτ࢖ͬͯ·͔͢ʁ • ීஈͷΞϓϦέʔγϣϯ։ൃͰςϯϓϨʔτ͸࢖͍ͬͯ·͢ ͔ʁ • $ͷࠒ͸ɺςϯϓϨʔτΛ࢖͏ͱʮࠇຐज़ͩʯͱ͔ɺ ʮແବʹෳࡶͳ͜ͱΛͯ͠Δʯͱ͔ݴΘΕͨΓ΋͠·͕ͨ͠ • $͔Β͸͍ͩͿ࢖͍΍͘͢ͳΓ·ͨ͠ • ࢲ͸ϥΠϒϥϦ͚ͩͰͳ͘ɺΞϓϦέʔγϣϯ։ൃͰ΋ςϯϓ Ϩʔτ͸ීஈ͔Β࢖͍ͬͯ·͢

Slide 7

Slide 7 text

ςϯϓϨʔτͱ͸ • ςϯϓϨʔτ͸ɺύϥϝλϥΠζυɾλΠϓͱ͔ݴΘΕͨΓ͢ Δ΋ͷͰɺܕΛύϥϝʔλԽ͢Δ࢓૊ΈͰ͢ • ܕʹΑΒͳ͍ॲཧΛڞ௨ԽͰ͖·͢ • $ݱࡏ͸͍ΖΜͳ΋ͷΛςϯϓϨʔτʹͰ͖·͢ • ؔ਺ςϯϓϨʔτ • ΫϥεςϯϓϨʔτ • ܕͷผ໊ςϯϓϨʔτ $ • ม਺ςϯϓϨʔτ $

Slide 8

Slide 8 text

ϥϜμࣜͱJGDPOTUFYQSͷಛ௃ • ϥϜμࣜ • ͦͷ৔ ؔ਺ϩʔΧϧ Ͱͪΐͬͱͨ͠ʮؔ਺ʯΛఆٛͰ͖Δ • JGDPOTUFYQSจ • ͦͷ৔Ͱʮಛఆͷܕʹର͢Δͪΐͬͱͨ͠ॲཧʯΛڬΈࠐΊΔ

Slide 9

Slide 9 text

ڬΈࠐΈ͍ͨͪΐͬͱͨ͠ॲཧ template void f() { if constexpr (typeid(T) == typeid(int)) { // …前処理… } // …共通の処理… } • ͨͱ͑͹લॲཧ • ͜ΕΛΦʔόʔϩʔυͰ΍Ζ͏ͱ͢Δͱ • ؔ਺಺ͷม਺Λ౉ͨ͠Γ͕ΊΜͲ͏ • ίʔυ͕ࢄΒ͹Δ

Slide 10

Slide 10 text

ΦʔόʔϩʔυͷΊΜͲ͏͞Λߟ͑Δ void f_impl(int x, double a, std::string b) { // …intに対する処理… } template void f_impl(T, double, std::string) { // …それ以外の型ではなにもしない… } • ಛఆͷܕҎ֎ʹର͢Δۭͷؔ਺Λఆٛ͢Δඞཁ͕͋Δ • Ҿ਺౉͠ͷίετ Ϝʔϒͱ͔EFDMWBMͱ͔ Λ·͡Ίʹߟ͑Δ ඞཁ͕͋Δ

Slide 11

Slide 11 text

ྫɿ΄ͱΜͲಉ͡ྻڍࢠΛ΋ͭྻڍܕͷϋϯυϦϯά enum class A { a, b }; enum class B { a, b, c }; template string enum_to_string(E e) { if constexpr (requires{ E::c; }) { if (e == E::c) return "c"; } switch (e) { …a, bの文字列化… } } • จࣈྻԽ͚ͩͰͳ͘ɺྻڍࢠΛܕʹม׵ɾରԠͤ͞Δ৔໘Ͱ΋ ࢖͑Δ

Slide 12

Slide 12 text

͍ͩ͡ͳ͜ͱ • JGDPOTUFYQSΛڬΈࠐΉͷ͸ɺʮͪΐͬͱͨ͠ʯॲཧͰ͋Δ ͱ͍͏͜ͱ • ϥϜμࣜͱಉ͘͡ɺେ͖͘ͳ͖ͬͯͨΒؔ਺Λ෼͚Δ͜ͱΛ ߟ͑Α͏

Slide 13

Slide 13 text

·ͱΊ • JGDPOTUFYQSจ͸ɺ • ؔ਺಺Ͱಛఆͷܕʹର͢Δͪΐͬͱͨ͠ॲཧΛڬΈࠐΊͯศར • ؔ਺Φʔόʔϩʔυͱҧͬͯɺ • ม਺Λ࣋ͪӡ͹ͳ͍ͰࡁΉ • ର৅֎ͷܕʹର͢Δۭͷؔ਺Λఆٛ͠ͳ͍ͰࡁΉ

Slide 14

Slide 14 text

JGDPOTUFYQSͷͦͷଞͷ࿩ • $ن֨తʹ͸ʮDPOTUFYQS JGTUBUFNFOUʯͱ͍͏໊শͰ ʮJGDPOTUFYQS ৚݅ࣜ ʯ͕ೖ͍ͬͯΔ • ߏจͷ౎߹ • DPOTUFYQS JG ৚݅ࣜ ͩͱFMTFͷํ΋DPOTUFYQS FMTFʹͳͬͯ͠·͏ • ͜͜Ͱ͸ػೳ໊ͱͯ͠JGDPOTUFYQSΛݴͬͯ·͢ • %ݴޠͰTUBUJDJGจͱ͍͏ͷ͕͋ΓɺͦͪΒ͸είʔϓΛੜ੒͠ ͳ͍ͷͰศར • ܕͷఆٛΛ෼ذͨ͠Γɺ৚݅͝ͱʹڞ௨ͷม਺Λ࡞ΕͨΓʜ • JGDPOTUFYQS ৚݅ࣜ \JOUYʜ^FMTF\5Yʜ^ G Y