Slide 1

Slide 1 text

$TUEBOZ ໨࣍ ࣗݾ঺հ ࠓ೔࿩͢͜ͱ * ͷ࢖͍ํ * ͷศརͳ࢖͍ํ ࢀߟࢿྉ ࣗݾ঺հ ੢ࢁ৴ߦ ೥͔ΒήʔϜϓϩάϥϚͱͯ͠׆ಈ 1$ɺՈఉ༻ήʔϜػɺεϚϗ ઐ໳ֶߍͰήʔϜϓϩάϥϛϯάΛڭ͑Δ ೔ຊిࢠઐ໳ֶߍ d ओʹ࣮श؂ಜ όϯλϯήʔϜΞΧσϛʔ d ʮ$ͰήʔϜΛ࡞ΔʯΈ͍ͨͳ಺༰Ͱ·Δͬͱतۀ $Λ৮Γ࢝Ίͨͷ͸೥͘Β͍͔Β

Slide 2

Slide 2 text

J04ͰήʔϜΛ࡞͍ͬͯ·͢ ࠓ೔࿩͢͜ͱ $Ͱ௥Ճ͞Εͨ* ͷ࢖͍ํͱศརͳ࢖͍ํ ͳʹͿΜ$ॳ৺ऀͳͷͰποίϛ͓ئ͍͠·͢ ͷ࢖͍ํ ΊͬͪΌ͍͍ࢿྉΛݟ͚ͭͨͷͰɺͦΕΛ࢖͍·͢ IUUQTHJUIVCDPN&[PF3ZPVDQQCPPLCMPCNBTUFSDQQMJCBOZNE ิ଍ #include #include #include int main() { // sd p o auto a = std::make_any>({ 0, 1, 2, 3 }); std::cout << std::any_cast>(a)[1]

Slide 3

Slide 3 text

ͷศརͳ࢖͍ํ * ʹ͍ͭͯ͸Θ͔͖ͬͯͨͷͰɺͲΜͳ࣌ʹ࢖͑Δͷ͔ͷ঺հ ίϯςφͱซͤͯ࢖͏ << std::endl; } #include #include #include #include int main() { // std::vector auto a = std::vector{ -1, 8.5, "Hoge" }; std::cout << std::any_cast(a[2]) << std::endl; // std::map auto b = std::map{ { "a", -1 }, { "b", 8.5 }, { "c", "Hoge" }, };

Slide 4

Slide 4 text

ԿͰ΋֨ೲͰ͖Δίϯςφܕ҆શੑͱ͸ * ͸ ͕ແ͍ͷͰTUETFUʹ͸࢖͑ͣɻ +40/ͷಡΈॻ͖Ͱ࢖͑ͦ͏ ਺஋ͱจࣈྻͷೖΓཚΕͨ஋ΛखؒΛ͔͚ͣʹѻ͑ͦ͏ Πϕϯτॲཧ ήʔϜͰ͋Γ͕ͪͳ˓˓͖͔͚ͬͰॲཧΛ͢ΔΛߟ͑Δ std::cout << std::any_cast(b.at("b")) << std::endl; } #include #include int main() { std::set s; std::any a; s.insert(a); } LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp)

Slide 5

Slide 5 text

8JOEPXTͰΞϓϦΛ࡞Δͱ͖ͷϝοηʔδॲཧΛ͓खຊʹͯ͠ΈΔ { switch (msg) { case WM_DESTROY: // Window < PostQuitMessage(0); return 0; case WM_LBUTTONDOWN: // DoAnything(); // return 0; } return DefWindowProc(hwnd , msg , wp , lp); } #include #include #include // enum { GAME_START, GAME_END, PLAYER_DEAD, }; // struct Item { // r t void event(int event_type)

Slide 6

Slide 6 text

{ switch (event_type) { case GAME_START: // r break; default: break; } } }; // r void EventProc(int event_type) { switch (event_type) { case GAME_START: // r break; default: break; } } int main() { Item a; // t std::vector> func;

Slide 7

Slide 7 text

ؔ਺΍ϝϯόؔ਺Λɺؔ਺ϙΠϯλͱͯ͠ొ࿥ͯ͠ஞ࣍ݺͼग़͢ͷ͸͙͢Ͱ͖Δ͕ɺ໰୊ͳͷ͕ίʔϧόοΫؔ਺ͷʮҾ ਺ʯͷܕɻ $ݴޠͰ࣮૷͍ͯͨ࣌͠͸ Ͱͨ͠ ͦ͜ͰҾ਺Λ* ʹͯ͠ΈΔ // func.push_back(std::bind(&Item::event, &a, std::placeholders::_1)); func.push_back(EventProc); // : v r for (auto& f : func) { f(GAME_START); } } #include #include #include enum { GAME_START, GAME_END, PLAYER_DEAD, }; // GAME_START i t struct GameStartArg

Slide 8

Slide 8 text

{ int a; float b; }; void EventProc(int event_type, std::any& arg) { switch (event_type) { case GAME_START: { // t o auto& a = std::any_cast(arg); } break; default: break; } } int main() { // t ay std::vector> func; // func.push_back(EventProc); // : t v r auto arg = std::make_any(GameStartArg{ -1, 0.5f }); for (auto& f : func) {

Slide 9

Slide 9 text

Ҿ਺༻ͷߏ଄ମΛ͍͍ͪͪఆٛ͢Δͷ͕ΊΜͲ͘͘͞ͳͬͨͷͰɺࠓ͸͜ͷํࣜ f(GAME_START, arg); } } #include #include #include #include #include enum { GAME_START, GAME_END, PLAYER_DEAD, }; // t using Arguments = std::map; void EventProc(int event_type, Arguments& arg) { switch (event_type) { case GAME_START: { // t o auto a = std::any_cast(arg.at("a")); }

Slide 10

Slide 10 text

ΊͬͪΌศརɻܕ҆શੑͱ͸ɻ 6*ͷ֤छ෦඼Λѻ͏࣌ break; default: break; } } int main() { // t ay std::vector> func; // func.push_back(EventProc); // : t v r auto arg = Arguments{ { "a", -1 }, // int { "b", 0.5 }, // double }; for (auto& f : func) { f(GAME_START, arg); } }

Slide 11

Slide 11 text

͋Γ͕ͪͳ6*ॲཧΛॻ͘ͱ͠·͢ #include #include // UI struct UIBase { virtual void draw() = 0; virtual ~UIBase() {} }; // struct UIBox : public UIBase { void draw() { // r } }; struct UICircle : public UIBase { void draw() { // r } }; int main() { // UI ay

Slide 12

Slide 12 text

͜ͷ࣍ͷεςοϓͰׂͱࠔΔ 6*#PYͰͷαΠζࢦఆ 6*$JSDMFͰͷ൒ܘࢦఆ ৭ࢦఆ 6*ผͷॲཧ͕૿͑ͯΊΜͲ͘ͳΔɻͦ͜Ͱ* ͷग़൪ std::vector> ui; ui.push_back(std::make_shared()); ui.push_back(std::make_shared()); // e n for (auto& obj : ui) { obj->draw(); } } #include #include #include #include #include // UI using Params = std::map;

Slide 13

Slide 13 text

// UI struct UIBase { virtual void setParams(Params& params) = 0; virtual void draw() = 0; virtual ~UIBase() {} }; // struct UIBox : public UIBase { void setParams(Params& params) { int w = std::any_cast(params.at("width")); int h = std::any_cast(params.at("height")); } void draw() { // r } }; struct UICircle : public UIBase { void setParams(Params& params) { int r = std::any_cast(params.at("radius")); } void draw() { // r }

Slide 14

Slide 14 text

6*ΛςΩετ͔Βߏங͢Δ࣌ʹΊͬͪΌศརɻܕ҆શੑͱ͸ɻ ࢀߟࢿྉ }; int main() { // UI ay std::vector> ui; ui.push_back(std::make_shared()); ui.push_back(std::make_shared()); auto params_box = Params{ { "width", 100 }, { "height", 150 }, }; ui[0]->setParams(params_box); auto params_circle = Params{ { "radius", 50 }, }; ui[1]->setParams(params_circle); // e n for (auto& obj : ui) { obj->draw(); } }

Slide 15

Slide 15 text

IUUQTKBDQQSFGFSFODFDPNXDQQVUJMJUZBOZ IUUQTHJUIVCDPN&[PF3ZPVDQQCPPL IUUQTXBOECPYPSH 7BMJEBUF