Godot์์ ์ฐ๋ฆฌ๋ ์ฌ์ ํ C++ 98/03์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด ๋ฌธ์ ์ ๋ชฉ์ ์ ๊ณ์ ๊ณ ์ํด์ผ ํ๋์ง ์๋๋ฉด ์ต์ C++(C++11/14/17 ๋ฐ 20) ํญ๋ชฉ์ ์ฌ์ฉํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ ๋๋ค.
Godot๊ฐ ์ฒ์ ์์ฑ๋์์ ๋, C++03์ ๊ฐ์ฅ ์ต์ ๋ฒ์ ์ด์๊ณ ๋ช ๋ ํ์ ๊ทธ ์คํ์ผ(ํ์ค ๋ฒ์ , ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํํผ ๋ฑ)์ ํน์ ์ปดํ์ผ๋ฌ(์ผ๋ถ ์ฝ์, ๋ด๊ฐ ์๋ ํ). ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ์ด๋ฌํ ์ฐ๋ ค๋ฅผ ๋ค์ ํ์ธํด์ผ ํฉ๋๋ค.
๊ณ ๋ คํด์ผ ํ ํญ๋ชฉ(์ด ๋ชฉ๋ก์ ๊ณ์ ์ฆ๊ฐํ๊ฑฐ๋ ์ผ๋ถ ํญ๋ชฉ์ ์ญ์ ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ์ฒ์์๋ ๋ธ๋ ์ธ์คํ ๋ฐ๋ง ํจ):
auto
, constexpr
, ๋๋ค ๋ฑ : ์ผ๋ฐ์ ์ผ๋ก ์ฝ๋ ์์ฑ์ ๋ ์ฝ๊ฒ ํ๊ฑฐ๋ ํ์ฌ ์ฝ์ด๋ฅผ ๋ฐฉํดํ์ง ์๊ณ ์ต์ ํ ๊ธฐํ๋ฅผ ์ ๊ณตํ๋ ๋ชจ๋ ์ต์ C++ ๊ธฐ๋ฅ์
๋๋ค.register
, ์ธ๋ผ์ธ "ํธ๋ฆญ" ๋ฑ : ์ปดํ์ผ๋ฌ๊ฐ ๋ ์ฑ๋ฅ์ด ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๋๋ก ํ๊ธฐ ์ํด ์ฝ๋์ ์ถ๊ฐ๋ ํญ๋ชฉ์
๋๋ค. ๊ทธ๋ค ์ค ์ผ๋ถ๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๊ฑฐ๋ ์ค์ ์ํฅ์ด ์๊ฑฐ๋ ์ฑ๋ฅ์ ์
ํ์ํฌ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ์ ๋จ์ด๋จ๋ฆด๊น? ๋ฌด์์ ๋ณด๊ดํ ๊ฒ์ธ๊ฐ?์์ ๋ณํ๋ ์ผ์ฐ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ธ์ ํฐ ๋ณ๊ฒฝ(์ด ๊ฒฝ์ฐ)์ ์ํํด์ผ ํฉ๋๊น? ๊ณ ๋ 4.0? ์๋๋ฉด Godot 3.0์ด ์์ ํ๋์๋ง์?
@reduz , @punto-, @akien-mga, @karroffel , @bojidar-bg, @BastiaanOlij , @Faless์ ๊ฐ์ ์ฌ๋๋ค์ ๋ช ์์ ์ผ๋ก ์ด๋ํ๊ฒ ์ต๋๋ค.
์ด๊ฒ์ ์ฌ๋ฌ ๋ฒ ๋ ผ์๋์์ผ๋ฉฐ ์ผ๋ฐ์ ์ธ ๋ต๋ณ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1) ์ฝ๋๋ฒ ์ด์ค๋ฅผ 03 ์ด์์ผ๋ก ์ฎ๊ธฐ๊ณ ์ถ์ง ์์ต๋๋ค. ๊ธฐ๋ฅ์ด ๊ฐ์น๊ฐ ์์ต๋๋ค. GDNative C++์ ๊ฒฝ์ฐ ์๋ฒฝํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
2) STL/Boost/Etc ์ฌ์ฉ ์ํฅ ์์. ์ด๋ก ์ ๊ทผ๊ฑฐ๋ ํญ์ ๋์ผํ์ต๋๋ค: a) Godot ํ
ํ๋ฆฟ์ ํ์ ํ์ง ์๋ ์์ ์ผ์ ํฉ๋๋ค(์ฆ, ์์์ ์ฐธ์กฐ ํ์ ๋ฐ ์ฐ๊ธฐ ์ ๋ณต์ฌ) b) STL์ ๋งค์ฐ ๊ธด ๋งน๊ธ๋ง๋ ๊ธฐํธ๋ก ์ธํด ๊ฑฐ๋ํ ๋๋ฒ๊ทธ ๊ธฐํธ์ ๋๋ฒ๊ทธ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
์ฐ๋ฆฌ๋ ๋ชจ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ ์ ์งํฉ๋๋ค.
์ฌ์ ์ธ ๋ํ์ ๋ํ ์๊ฒฌ์ด ์ข ์์์ง๋ง
ํ ๋ก ๋ ๊ณต๊ฐ.
์ด๋ฏธ ๊ทธ๋ ๊ฒ ๋ง์ด ๋ ผ์๋๊ณ ๋ซํ ์๋์ง ๋ชฐ๋์ต๋๋ค.
auto, constexpr ๋ฑ๋ ๋ฒ๋ฆฌ๋์?
'๋ฑ๋ก'์ ์ญ์ ํ์๊ฒ ์ต๋๊น?
์ 7์ 18์ผ 2017๋
์คํ 1์ 54๋ถ, "ํ์ ๋ฆฌ๋์์ธ ํค" ์๋ฆผ @github.com
๊ธฐ๋ก:
์ด๊ฒ์ ์ฌ๋ฌ ๋ฒ ๋ ผ์๋์์ผ๋ฉฐ ์ผ๋ฐ์ ์ธ ๋ต๋ณ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ชจ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ ์ ์งํฉ๋๋ค.
โ
์ค๋ ๋๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฉ์์ง๋ฅผ ๋ฐ๋ ๊ฒ์
๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/godotengine/godot/issues/9694#issuecomment-316041201 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/ALQCtipKmepD_1Xw6iRXZ7aGoQlLfiwFks5sPJzqgaJpZM4ObOio
.
์ค๋งํธ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์์ ํ๊ณ ์ด ์ฝ๋๊ฐ NIH ์ฆํ๊ตฐ์ ์๊ณ ์๋ค๊ณ ์ด ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ์ง๋ง ์์๋ ์ ๊ทธ๋ ์ด๋ํ ์๊ฐ์ด ์์ผ๋ฏ๋ก ํฌ๊ธฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ฐ๋ฐ์๊ฐ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐ ํฌ์ํ๋ ๊ฒ์ ์ ํธํ๋ ์ฝ๋๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๋ ๋ฐ๋ ๋ง์ ์๊ฐ์ด ์์๋ ๊ฒ์ ๋๋ค. ๋๋ ์ด๋ป๊ฒ ๋ ์ด๊ฒ์ ์ดํดํฉ๋๋ค. ์์ง ์ฌ์ฉ์๋ "๋ฆฌํฉํ ๋ง"(๊ธฐ์ ๋ถ์ฑ์ ๊ฐ์ ๊ฒ์ ์ดํดํ์ง ์๊ณ )๋ณด๋ค ์๋ก์ด ๊ธฐ๋ฅ์ ์ ํธํฉ๋๋ค.
@Marqin ์ฃ์กํ์ง๋ง ์ค๋งํธ ํฌ์ธํฐ๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ๋์ ์๊ฐ์ ๋๋ค.
1) ์ ์ผํ๊ฒ ์ ์ฉํ ๊ฒ์ ์ธ๊ธ๋ ๊ฒ์ด๊ณ , ๋๋จธ์ง๋ ์ธ์ด์ ์ด๋ฏธ ์กด์ฌํ๋ ๊ธฐ๋ฅ์ ๋ํ ์ ์ ์ ์์์
๋๋ค.
2) ๋ชจ๋ ๊ณณ์์ ์ค๋งํธ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋์ฐํ ์๊ฐ์
๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ผ์ผํค๋ ์ฐธ์กฐ ์ฃผ๊ธฐ๊ฐ ๋ฐ์ํ ์ํ์ด ์์ต๋๋ค.
3) ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ ์ฌํ Ref<>๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ฐธ์กฐ ์นด์ดํ
์ ์๋ ๋ฐฉ์์ ์ ์ดํ ์ ์๋ค๋ ์ด์ ์ด ์์ผ๋ฏ๋ก C#๊ณผ ๊ฐ์ ์ธ์ด์ ๋ํ ๋ฐ์ธ๋ฉ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๊ณ ์ ํ gc
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๊ฐ ๋ณ๋์ค๋ฝ๊ฒ ๊ฒฐ์ ํ๋ค๊ณ ์ฃผ์ฅํ๊ธฐ ์ ์ ๋จผ์ ๋ฌผ์ด๋ณด์ธ์. ์ฐ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ณ ํ๋ก์ธ์ค๋ฅผ ๋ชจ๋ ์ฌ๋๊ณผ ๊ณต์ ํฉ๋๋ค.
ํ์ง์ ํฅ์์ํค๊ณ ์ถ๋ค๋ฉด ์ฝ๊ฒ ํ ์ ์๋ ๊ฒ์ ๋จ์ ํ ์คํธ ์์ฑ์ ์์ํ๋ ๊ฒ์ ๋๋ค.
๋๋จธ์ง๋ ์ธ์ด์ ์ด๋ฏธ ์กด์ฌํ๋ ๊ธฐ๋ฅ์ ๋ํ ์ ์ ์ ์์์ ๋๋ค.
@reduz , ๋ช ์์ ์์ ๊ถ๊ณผ ์ธ์ด์ ์ด๋ฏธ ์กด์ฌํ๋ RAII ๋ฉ๋ชจ๋ฆฌ ํด์ ๊ฐ ์๋ unique_ptr์ ์ด๋ป์ต๋๊น?
๋ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฟ๋ง ์๋๋ผ ์ค๋ ๋ฉ๋ ์ฌ์์ง๋๋ค(์: lock_guard
).
@RandomShaper ์ ๋ ๋ฏธ๋์ ์ด๋ ์์ ์์ ์ ๊ทธ๋ ์ด๋ํ๋ ๊ฒ์ ๋ฐ๋ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ง์ ์ ์ฉํ ๊ธฐ๋ฅ์ด ์์์๋ ๋ถ๊ตฌํ๊ณ ์ต์ C++ ๋ฒ์ ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ ๋ช ์์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋ง๋๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ์ผ๋ฐ์ ์ผ๋ก ๋ค๋ฅธ ์ฌ๋์ด ์ฝ๋๋ฅผ ์ฝ๊ธฐ๊ฐ ๋ ์ด๋ ค์์ง๋๋ค(์ผ๋ฐ์ ์ผ๋ก auto ํค์๋ ๋จ์ฉ).
๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๋ ๋ค๋ฅธ ์ด์ (์: ์์ธ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ rtti๋ฅผ ์ฝ๊ฐ์ ๋น์ฉ์ผ๋ก ๋นํ์ฑํํ ์ ์์)์ ์ปดํ์ผ๋ฌ๊ฐ ํจ์ฌ ๋ ์์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์์ฑํ๋ค๋ ๊ฒ์ ๋๋ค.
๊ด์ฐฎ์. ๋๋ ๋น์ ์ ๋ง์ ์กด์คํฉ๋๋ค. ๋๋ ์ด๊ฒ์ ๋ํด ํ ๋ก ํ๋ ๊ฒ์ด ๊ฑด๊ฐํ ์ผ์ด๋ผ๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.
๋๋ ๋ช๋ช ํฐ ๋น๋์ค ๊ฒ์ ํ์ฌ(Ubisoft, IIRC)๊ฐ ํฐ ์ฝ๋ ๊ธฐ๋ฐ์ ํ๋์ ์ธ C++๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๊ทธ๋์ ์ด๊ฒ์ Godot์๋ ์๋ฒฝํ๊ฒ ์ ํฉํด์ผ ํฉ๋๋ค. ๋ฌผ๋ก ์ง์ ํ๋ฏ์ด ์์ /์๊ฐ์ด ํ์ํฉ๋๋ค.
์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ํ ์ ์๋ ์ด์ :
๋ ๊ฒฝ์ฐ ๋ชจ๋ auto
๋ฐ์ํ๋ ๊ฒ์ฒ๋ผ ๊ธฐ๋ฅ์ ๋จ์ฉํ์ง ์๋๋ก ์ฝ๋ฉ ์คํ์ผ์ ์ ์ํด์ผ ํฉ๋๋ค.
๋ฌผ๋ก ์ง๊ธ์ ์ฐ์ ์์๊ฐ ๋ ๋์ ๊ฒ๋ ์์ง๋ง, 3.0์ด ์์ ํ๋๊ฑฐ๋ ๋ฏธ๋์ ๋ค๋ฅธ ์์ ์ด ๋๋ฉด ์ด๋ฏธ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค.
@Marqin ์ธ๊ธํ๋ฏ์ด Godot๋ ๋ ธ๋์ ๋ํด ์์ฒด ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ์๋ก์ด ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ ๊ฒ๋ณด๋ค ๋ ํฉ๋ฆฌ์ ์ ๋๋ค.
๋ํ ์ ๊ธ ๊ฐ๋๋ ์ฌ์ค์ 3์ค์ ์ฝ๋์ด๋ฉฐ ์ฐ๋ฆฌ๋ ์ด๋ฏธ C++11+๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๊ตฌํํ์ต๋๋ค.
๋ค์ ๋งํ์ง๋ง, "ํ์ค" 1) ์ด๋ค ๊ฒ์ด๋ ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋ ๊ฒ๋ณด๋ค ๋ ์ข์์ผ ํ๊ณ 2) ์ด์จ๋ ์ฌ์ฉํ๋ค๋ฉด ๋ ๋ซ๋ค๊ณ ๊ฐ์ ํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? .๋ด ์๊ฐ์ ๊ทธ๊ฒ์ ํํ ํ์๋ฆฌ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ค์์ ์ธ์ ๊ธฐ๋ฅ์ ์ญ์ ํ๊ณ ostream/istream์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๊ฝค ๋ฉ์ง String ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ๊ณ ํจ์ฌ ๋ ๋ง๋น๋ std::string ๋๋ std::wstring์ผ๋ก ๊ต์ฒดํ์๊ฒ ์ต๋๊น?
ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ชจ๋ ์ฉ๋๋ฅผ ์ ๊ณตํ์ง ์์ผ๋ฉฐ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ๋ณด๋ค ๋ ์ ์๋ํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ๋ค์ ๊ทธ๊ฒ๋ค์ ํ์๋ก ํ๋ ์ฌ๋๋ค์ ์ํด ์กด์ฌํ๋ฉฐ, ํ๋นํ ์ด์ ๊ฐ ์๋ค๋ฉด ๋ฌด์ํ๊ณ ์์ ๋ง์ ๊ตฌํ์ ์์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด์ ๋ํด ํ์ ํ๊ณ ์์ต๋๋ค.
@RandomShaper ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1) ์ด์ต๋ณด๋ค ๋น์ฉ์ด ๋ ๋ง์ด ๋ ๋ค.
2) C++11+๋ฅผ ์์ฑํ๋ ํ์ค ๋ฐฉ๋ฒ์ ๋ํ ๋ง์ ์ธ์์ ๋ํ ์ฐฝ์ ์ฝ๋๋ค. ์ธ์ ๊ฐ๋ ๊ทธ๊ฒ๋ค์ ๊ฐ์ง ๊ฐ์น๊ฐ ์์ ์ ์๊ณ ์ด๋ฌํ ๊ธฐ๋ฅ์ ํ์ฉํ๊ธฐ ์ํด ์์ง์ ๋ง์ ๋ถ๋ถ์ ๋ค์ ์์ฑํ๋ ๊ฒ์ด ์ธ์ ๊ฐ๋ ์ ์ฉํ ์ ์์ง๋ง ์ง์คํด์ผ ํ ํจ์ฌ ๋ ์ค์ํ ๊ฒ๋ค์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
3) ๋ํ ์ด์ ์ ์ธ๊ธํ๋ฏ์ด ์๋ก์ด C++ ๋ฒ์ ์ผ๋ก ํฌํ
ํ๋ ๊ฒ๋งํผ ๋ฉ์ง ์๋ฆฌ๊ฐ ๋ ์ ์์ง๋ง ์ด๋ก ์ธํด ๋ฐ์ด๋๋ฆฌ ํฌ๊ธฐ๊ฐ ํจ์ฌ ์ปค์ง ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ๋ฐ๋์งํ์ง ์์ ์ ์์ต๋๋ค.
ํ์ฌ๋ก์๋ ์ฌ๊ฐํ๊ฒ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋ช ๋ ํ์ ๋ค์ ๋ ผ์ํ ์ ์์ต๋๋ค.
๋ด๊ฐ ์๊ฐํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํ๋ ๊ฒ์ Godot๊ฐ --std=c++17๊ณผ ๊ฐ์ ์ต์ ์ผ๋ก ์ปดํ์ผ๋๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ํ์ํ๋ค๋ฉด ํ๋ C++๋ก ์์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฝ๊ฒ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, https://github.com/godotengine/godot/issues/9691 ์ฝ๋๋ฒ ์ด์ค์์ register ํค์๋ ์ ๊ฑฐ์ ํฌํํ๊ฒ ์ต๋๋ค.
์ด๋ป๊ฒ ๋ ๊ด๋ จ์ด ์์ง๋ง gcc-6.3์ด ์ง์๋์ง ์๋๋ค๋ ๊ธ์ ์ฝ์ ๊ธฐ์ต์ด ์์ต๋๋ค(google
https://github.com/godotengine/godot/issues/7703์ ์๋ค๊ณ ๋งํฉ๋๋ค. gcc-6.3์ด ๋ด ๋ฐฐํฌํ(debian stable)์ ๊ธฐ๋ณธ ์ปดํ์ผ๋ฌ์ด๊ธฐ ๋๋ฌธ์ ๊ท์ฐฎ์ต๋๋ค. ์๋ฌด๋ ๊ทธ๊ฒ์ ํ์ธํ ์ ์์ต๋๊น? ์ ๊ทธ๋ฐ๋ฐ?
@efornara ์ผ๋ถ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ์ด๋ฏธ ์ต์ C++ ๋ฒ์ ์ด ํ์ํ๋ฉฐ Scons๊ฐ ๋ณต์ ๋ ๋น๋ ํ๊ฒฝ์์ ์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๊ด์ฐฎ์ต๋๋ค. ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด๋ ค๋ฉด etc2comp thridparty ์ฝ๋๋ฅผ ํ์ธํ์ญ์์ค.
@karroffel ๊ฐ์ฌํฉ๋๋ค, ๋๋ ๊ทธ๊ฒ์ ๋ชฐ๋์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ์ข์ ๊ธฐ๋ฅ์ด ๋ ์ ์์ง๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ๋ ํ์ํ์ง ์์ต๋๋ค.
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ๋๊ตฐ๊ฐ ๋น์ทํ ์์ ์ ์ํํด์ผ ํ๊ณ ์ด ๊ฒ์๋ฌผ์ ์ฐพ์ ๊ฒฝ์ฐ ๊ด๋ จ ํ์ผ์ https://github.com/godotengine/godot/blob/master/modules/etc/SCsub ์ ๋๋ค. grep์ ์ฌ์ฉํ์ฌ ์ฐพ์์ผ๋ฉฐ ํ์ฌ ์ด๊ฒ์ด ํ์ํ ์ ์ผํ ์ฅ์์ธ ๊ฒ ๊ฐ์ต๋๋ค.
C++11์ C++11์ด ์๋ ์ฝ๋์ ์ฐ๊ฒฐํ๋ ๊ฒ์ ์์ ํ์ง ์์ต๋๋ค. - http://gcc.gnu.org/wiki/Cxx11AbiCompatibility
@Marqin ๋งํฌ๋ฅผ ์๋ชป ์ดํดํ์ง ์๋ ํ ์ด๊ฒ์ ์ค์ ๋ก Godot๊ฐ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ์ง๋ง ๋์ ์ฌ์ฉ์ ์ ์ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ์ง์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
C++98 ์ธ์ด๋ C++11 ์ธ์ด์ ABI ํธํ๋์ง๋ง ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ๋ฌ ์์น์์ ํธํ์ฑ์ด ์ค๋จ๋ฉ๋๋ค.
์ธ์ด๋ฅผ ํผํฉํ๋ ๊ฒ์ ์๋นํ ์์ ํด ๋ณด์ด์ง๋ง(๋๋ ์ธ์ ํ๊ณ ์์ผ๋ก ์๋ํ์ง ์์ ์๋ ์์) ์, ๋ฒกํฐ, ๋ชฉ๋ก ๋ฑ๊ณผ ๊ฐ์ ๊ฒ์ ํผํฉํ๋ ๊ฒ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ๊ฒ์ผ๋ก ์๋ ค์ ธ ์์ต๋๋ค.
@efornara ์ด ๋งํฌ๋ C++11์ ์ฌ์ฉํ๋ ์ผ๋ถ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ C++03์ ์ฌ์ฉํ๋ Godot์ ์ฐ๊ฒฐํ๋ ๊ฒ์ ๋๋ค.
@Marqin ์, ํ์ง๋ง ๋งํฌ๋ฅผ ์ดํดํ๋ ๋ฐฉ์์ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ๋ฌ๋ถ์ด ํ ์ ์๋ ๊ฒ์ std::list<>๋ฅผ Godot์์ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ๋ฌํ๋ ๊ฒ์ ๋๋ค.
@reduz Godot์ ๋ด๋ถ Ref<> ๋ฌธ์๋ ์ด๋์์ ์ฐพ์ ์ ์๋์? Godot ๋ด๋ถ ์ปจํ ์ด๋๊ฐ STL์ ์ปจํ ์ด๋์ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง์ ๋ํ ๋ฌธ์๋ ์ด๋์์ ์ฐพ์ ์ ์๋์?
@Marqin ์ปจํ
์ด๋์ ๊ฒฝ์ฐ ๋ง์ง ์์ต๋๋ค.
http://docs.godotengine.org/en/stable/development/cpp/core_types.html#containers
Ref<>์ ๊ฒฝ์ฐ์๋ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ์๋ง ์ถ๊ฐ๋์ด์ผ ํ ๊ฒ์
๋๋ค.
์ด๋ฌํ ๊ฒ๋ค์ ์ถ๊ฐํ๊ธฐ ์ํด ๋ฌธ์๋ฅผ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ์์ ๋งค์ฐ ํ์ํฉ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ๋๋ ์๋ก์ด C++ ํ์ค์ด ์์ฃผ ํ๋ฅญํ๋ค๊ณ ์๊ฐํ์ง๋ง, ๋๋ฌด ์ ์ ์ด๋์ ์ํด ๋๋ฌด ๋ง์ ๋ ธ๋ ฅ์ด ํ์ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ Godot ๋ด๋ถ ๋ฆฌํฉํ ๋ง์ ์ ์ํ์ง ์์ ๊ฒ์ ๋๋ค.
๋ํ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ ์ค ํ๋๋ ๋ฐ๋ก ์ด๋ฌํ ์ด์ ๋ก C++์ ํน์ง ์ค ํ๋์
๋๋ค. ํ์ง๋ง ์ฌ์ ํ ์๋ก์ด Godot ๊ธฐ๋ฅ๊ณผ GDNative์ ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ ๋ ์ด๋ฌํ ์ด์ ๋ก Godot๊ฐ ์ต์ C++ ์ง์์ผ๋ก ์ปดํ์ผ๋๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
@reduz C++11/14/17์ ์ฌ์ฉํ๋ฉด ๋ ๋ช
์์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ํ๋ ์ผ์ด์ง๋ง C++ ์ด๋ณด์์๊ฒ๋ ๋จ์ ์ด์ง๋ง C++ ๊ณ ๊ธ ์ฌ์ฉ์์๊ฒ๋ ์ข์ ์ ์
๋๋ค.
"์๋"์ ๊ดํด์๋ ๊ฐ์ธ์ ์ผ๋ก ๊ณ ๊ธ ์ฌ์ฉ์์๊ฒ๋ ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ผญ ํ์ํ์ง ์์ ๊ฒฝ์ฐ์๋ ์ ํ์ ๊ณ์ํด์ ์
๋ ฅํ๋ ๊ฒ์ ํผํ ์ ์์ ๋ฟ๋ง ์๋๋ผ ์ผ๋ถ ๋ฒ๊ทธ๋ฅผ ์
๋ ฅํ๋ ๊ฒ๋ ํผํ ์ ์์ต๋๋ค.
์ฐธ๊ณ ๋ก ์ ๋ ์ต๊ทผ ๋ง์คํฐ(godot3)๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ปดํ์ผํ์ต๋๋ค.
scons platform=x11 target=debug tools=yes builtin_openssl=true CCFLAGS=-std=c++17
๋ฐ๋น์ ์คํธ๋ ์น(gcc-6.3)์์. ์ฑ๊ฐ์๊ฒ๋ ์ด ์ต์ ์ C ํ์ผ์ ์ปดํ์ผํ ๋๋ ์ค์ ๋๋ฏ๋ก ํ์ฑํํ๋ฉด ๊ฒฝ๊ณ ๊ฐ ์์์ง์ง๋ง ๊ทธ ์ธ์๋ ๋ชจ๋ ์์กฐ๋กญ๊ฒ ์งํ๋์์ต๋๋ค. register ํค์๋์กฐ์ฐจ๋ ๋ฌธ์ ๋ฅผ ์ผ์ผํค์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ณต์ ๋น๋๊ฐ ์ด๋ฐ ์์ผ๋ก ์ปดํ์ผ๋๋๋ก ์ ์ํ๋ ๊ฒ๊น์ง๋ ์๋์ง๋ง ํ๋ก์ ํธ์ ํ์ํ ๊ฒฝ์ฐ ์ต์ ์ด ์๋ค๋ ๊ฒ์ ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ด๊ฐ ์ ์ํ๊ณ ์ถ์ ๊ฒ์ ์ด๊ฒ์ ๊นจ๋ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ํ๊ท๋ก ์ทจ๊ธ๋๋ค๋ ๊ฒ์ ๋๋ค.
ํธ์ง: ์ผ๋ถ ์คํ๋ฅผ ์์ ํ์ฌ ๊ฒฝ๊ณ ์ ๋ํ ์ค๋ช ์ ๋ ๋ช ํํ๊ฒ ํ์ต๋๋ค.
๊ท์ฐฎ๊ฒ๋ C ํ์ผ์ ์ปดํ์ผํ ๋๋ ์ต์ ์ด ์ค์ ๋ฉ๋๋ค.
CPPFLAGS
์ผ๋ก ์๋ํ์
จ์ต๋๊น?
@Hinsbart ์๋์,ํ์ง ์์์ต๋๋ค. ๋ฐฉ๋ฒ์ด ์์์ง๋ ๋ชจ๋ฅด์ง๋ง ์ ๋ scons๋ฅผ ์ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ๋์ง์์ด ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ๋๋ก๊ฐ์ต๋๋ค.
$ scons platform=x11 builtin_openssl=true -h | grep FLAGS
CCFLAGS: Custom flags for the C and C++ compilers
CFLAGS: Custom flags for the C compiler
LINKFLAGS: Custom flags for the linker
ํธ์ง: ๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ๋๋ ๊ทธ๊ฒ์ด Godot ๋น๋ ์์คํ
์์ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง ๋ชจ๋ฅด์ง๋ง CPPFLAGS
๋ ์ ์ฒ๋ฆฌ๊ธฐ ์ต์
์ ์๊ฐํ๊ฒ ๋ง๋ค ๊ฒ์
๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ์ ๋ ํญ์ C++์ CXXFLAGS
๋ฅผ ์ฌ์ฉํด ์์ต๋๋ค.
CPPFLAGS๋ฅผ ์ฌ์ฉํด ๋ณด์ จ์ต๋๊น?
CPPFLAGS
๋ ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ธ์ด์ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก C์ C++๊ฐ ๋ชจ๋ ํฌํจ๋ฉ๋๋ค.
@m4nu3lf GDNative ์์ ์ํ๋ C++ ํ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ด ๊ฒฝํ์ ์ฝ๋๋ฅผ ์ญ์ ํ ์ ์๋ ๋ชจ๋ ๊ธฐํ๊ฐ ์ข์ ๊ธฐํ์ ๋๋ค.
์๋ง๋ ์ฐ๋ฆฌ๋ ์ด๋ค ํ์ผ์ด ์ญ์ ๋๊ณ C++11 ๋ณ์ข ์ผ๋ก ๋์ฒด๋ ์ ์๋์ง ๋ฌธ์ํํ๋ ์ผ์ข ์ ์ํค ํ์ด์ง๋ฅผ ์ค์ ํ ์ ์์ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์๋ ์ค๋ ๋ฉ ํ๋ฆฌ๋ฏธํฐ๋ธ ๋ฑ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
๋ณ๊ฒฝ์ ์ํ ๋ณ๊ฒฝ์ ์ข์ง ์์ต๋๋ค (์๋ด koolaid). ๊ทธ๋ฌ๋ ์ด ๊ฒฝ์ฐ LLVM ํ๋ก์ ํธ ๋ฐ ๊ธฐํ ๋ง์ FOSS ํ๋ก์ ํธ๋ ๋ณด๋ค ๋ช ํํ ๊ตฌ๋ฌธ ํจํด, ์ฆ ์๋ก์ด for-iterator ํ๊ธฐ๋ฒ์ ์ ํธํ๋ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ์ต๋๋ค. (์์งํ ๋งํด์) ๊ฐ๋ฅํ ํ ์ ์ ํ๋ซํผ ํน์ ์ฝ๋๋ฅผ ์ ์งํ๋ ๊ฒ์ด ๊ฒ์ ์์ง์ ์ด์์ ์ด๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์ ๋ถ๋ฆฌ๋ฅผ ๊ฐ ์ธ์ด ๋ฐํ์์ ์คํ๋ก๋ฉํฉ๋๋ค.
๋น์ ์ด ์์ฑํ๊ฒ ๋ ์ต๊ณ ์ ์ฝ๋๋ ๋น์ ์ด ์ฐ์ง ์์ ์ฝ๋์ ๋๋ค. :)
ํธ๊ธฐ์ฌ์ผ๋ก ์ธํด ์ด์ C++ ๋ฐ ์ต์ C++๋ก ์ปดํ์ผ๋๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๊น? C++ ๋ฒ์ ๊ฐ์ ์ค์ํ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๊น?
ํธ๊ธฐ์ฌ์ผ๋ก ์ธํด ์ด์ C++ ๋ฐ ์ต์ C++๋ก ์ปดํ์ผ๋๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๊น? C++ ๋ฒ์ ๊ฐ์ ์ค์ํ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๊น?
์ต์ C++๋ 99.99...%์ ๊ฒฝ์ฐ์์ ์ด์ C++์ ์ญํธํ๋ฉ๋๋ค. .
๊ทธ๋ฌ๋ ์ต์ C++์๋ ์ค์ํ ๊ธฐ๋ฅ์ด ์์ผ๋ฉฐ ์ด์ C++ ๋ฒ์ ์์๋ ๋ถ๋ช
ํ ์๋ํ์ง ์์ผ๋ฉฐ ์ด๋ฌํ ๊ธฐ๋ฅ์ ๊ฐ๋ณ ๋งคํฌ๋ก ๋ฐ auto
๋ฐ ๋๋ค์ ๊ฐ์ ์ฌ์ฉ์ฑ ๊ธฐ๋ฅ๋ฟ๋ง ์๋๋ผ move
์ ๊ฐ์ ํจ์จ์ฑ ๊ธฐ๋ฅ๋ ์์ต๋๋ค.
์ด์ Visual Studio๋ ์ต์ C++17์ ์ง์ํ๋ค๋ ์ ์ ๊ณ ๋ คํ๋ฉด ์ต์ ๋ฒ์ ์ ์ฌ์ฉํ์ง ์์ ์ด์ ๊ฐ ์์ต๋๋ค.
๋๊ธ์ ๋ฌ๊ณ ์ถ์์ต๋๋ค. ๋๋ auto_ptr์ ์ฌ์ฉํ๋ third_party ๋ฌผ๊ฑด ์ค ํ๋๋ผ๋ ์ ์ผํ ๋ฌธ์ ๊ฐ ์๋ C++17 ํ๋๊ทธ๋ก Godot๋ฅผ ์ปดํ์ผํ ์ ์์์ต๋๋ค.
๋ฌธ์ ๋ C++17์์ ์ปดํ์ผ๋์ง ์๋๋ค๋ ๊ฒ์ด ์๋๋ผ, ๋ฌธ์ ๋ C++17 ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ ์ฌ๋๋ค, ๋๋ ๋ ๋์ ๊ฒ์ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ PR์ ์์ํ๋ ๊ฒ์ ๋๋ค... ํ๋ก์ ํธ๊ฐ c์ ์๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ๊ธฐ ์ํด์๋ง ++03.
๋๋ค๊ฐ ์๋ค๋ ๊ฒ์ ์ฌ๊ธฐ์ ๋ณผ ์ ์๋ ๊ฑฐ๋ํ ๋ฌธ์ ์
๋๋ค.
์ฌ๋ฌ ๋ฒ, Godot๋ ๋ฐ์ดํฐ์ ์์ ๋ชฉ๋ก์ ์ ์ฅํ ๋ค์ ์ด๋ฅผ ๋ฐ๋ณตํด์ผ ํฉ๋๋ค.
์ด๋ฌํ ๋ชจ๋ ๊ฒฝ์ฐ์ "for_each" ๋๋ ์์ฒด์ ์ผ๋ก ๋ฐ๋ณต๋๋ ์ ์ฌํ ๊ตฌ์กฐ๋ก ์ํํ ์ ์์ผ๋ฉฐ, ์ธ๋ผ์ธ/์ต์ ํ๋๋ ๋๋ค ๋๋ถ์ ์์ฒญ๋ ์์ ์ฝ๋ ๋จ์ํ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ฐ์ ๋ฐ ์ฑ๋ฅ ํฅ์์ด ๊ฐ๋ฅํฉ๋๋ค. (๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉ๋๋ C++11์
๋๋ค). ์ฐ๊ฒฐ๋ ๋ชฉ๋ก์ ๋ชจ๋ ์ผ๋ฐ ๋ฃจํ์ ๋ํด ์ ํํ ๋๊ฐ์ ๊ฒ์
๋๋ค.
๋ํ ์ด๋ ์ฐ์ฐ์๋ ๋ ๋์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํ์ฉํ์ฌ ํ์ฌ์ ์ ๋์ ์ผ๋ก ์ข์ง ์์ ๊ตฌ์กฐ๋ฅผ ๋ ์ต์ ํ๋ ์ผ๋ถ๋ก ๋์ฒดํ ์ ์์ต๋๋ค.
๋ฌธ์์ด ๋ฐ์ดํฐ ์ ํ(์: "mystring"_hs) ๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ ํด์๋ ๋ฌธ์์ด์ ์ฝ๋์ ๋ชจ๋ ๊ณณ์ ํผ๋จ๋ฆฌ๋ ์ข์ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ๋ฌธ์์ด ๊ฒ์ฌ(์คํฌ๋ฆฝํธ ๋ฐ ์ด๋ฒคํธ ์ฝ๋์์ ๋งค์ฐ ์ผ๋ฐ์ ์)๋ฅผ ํจ์ฌ ๋ ๋น ๋ฅด๊ฒ ๋ง๋ญ๋๋ค.
std::thread๊ฐ ์ฌ์ฉ๋์ง ์๋๋ผ๋(์ ์๊ฐ์๋ ์๋นํ ๋์ฐํ ์ถ์ํ๋ผ๊ณ ์๊ฐํฉ๋๋ค), std atomics ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋๋๊ณ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. std::์์
๊ทธ๋ฆฌ๊ณ ์ฌ๋๋ค์ด ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฝ๊ฒ ํตํฉํ ์ ์์ ๋ ์ฌ๋๋ค์๊ฒ C++03์ ๊ฐ์ํ๋ ๊ฒ์ด ํ๋ก์ ํธ ์์ฒด์ ์ผ๋ง๋ ํฐ ํ๊ฒฉ์ ์ฃผ๋์ง ์ด์ผ๊ธฐ์กฐ์ฐจ ํ์ง ๋ง์. ์๋ํ๋ฉด Godot๋ ๊ทธ๋ฐ ์ค๋๋ ๋ฒ์ ์ C++์์ ํฌ๊ธฐ๋์ง ์์ ์ ์ผํ ์คํ ์์ค C++ ํ๋ก์ ํธ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค( ๋ด๊ฐ ์๋ ํ)
๊ฐ์ธ์ ์ผ๋ก, ์ ๋ ๋ณด์์ ์ด๊ณ ์ ๋์ ์ธ ์ต์ C++ ํ์ค์ ๋ฐ๋ฅด์ง ์๋๋ค๋ ๋ฐ ๋์ํ์ง๋ง, C++14์ ์ผ๋ถ ๊ฒ์ฆ๋ ๊ธฐ๋ฅ์ด ์๋ C++11๊ณผ ๊ฐ์ ๊ฒ์ด ๊ฐ์ฅ ์ ์๋ํ๊ณ Godot๋ฅผ ํฌ๊ฒ ๊ฐ์ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. C++11-14๋ ps4, xbox, ์ค์์น, pc, ์ ๊ฐํ PC, Android, IOS ๋ฐ HTML5 ์น ์ด์ ๋ธ๋ฆฌ๋ก ํฌํ ๋๋ Unreal Engine์ ์ถฉ๋ถํฉ๋๋ค. ๋๋ ํจ์ฌ ์ ์ ์์ ํ๋ซํผ์ ์ง์ํ๋๋ฐ Godot๊ฐ ์ค์ค๋ก๋ฅผ ์ ํํด์ผ ํ๋ ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋ฌธ์์ด ๋ฐ์ดํฐ ์ ํ(์: "mystring"_hs) ๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ ํด์๋ ๋ฌธ์์ด์ ์ฝ๋์ ๋ชจ๋ ๊ณณ์ ํผ๋จ๋ฆฌ๋ ์ข์ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ๋ฌธ์์ด ๊ฒ์ฌ(์คํฌ๋ฆฝํธ ๋ฐ ์ด๋ฒคํธ ์ฝ๋์์ ๋งค์ฐ ์ผ๋ฐ์ ์)๋ฅผ ํจ์ฌ ๋ ๋น ๋ฅด๊ฒ ๋ง๋ญ๋๋ค.
๋ํ ์ค์์น์ ๊ฐ์ ์ฉ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ช ๋
์ ์ ํ๋ผ์ด์จ์ดํธ ๋ฌธ์์ด ๊ตฌํ์ ๋์ฒดํ๊ธฐ ์ํด Atom ์ ํ์ ๋ง๋ ๊ฒ์ฒ๋ผ:
https://github.com/OvermindDL1/OverECS/blob/master/StringAtom.hpp
32๋นํธ(์ต๋ 5์ ๋๋ ํ ์ด๋ธ์ ์ฝ๊ฐ ๋ค์ ์ฝ๋ฉํ๋ ๊ฒฝ์ฐ 6์)์ 64๋นํธ ๋ฒ์ (๊ธด๋ฐํ ์ธ์ฝ๋ฉ ์ ํ ์ฌ๋ถ์ ๋ฐ๋ผ ์ต๋ 10 ๋๋ 12์)์ด ์์ต๋๋ค. ์์ ํ ๋๋๋ฆด ์ ์์ผ๋ฉฐ ์ปดํ์ผ ํ์์ ๋๋ ๋ฐํ์์ ์๋ฐฉํฅ์ผ๋ก ๋์ ์ผ๋ก ๋ฐ์ํ๋ฉฐ ์ค์์น ๋ฑ์์ ์์ ํ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฑ... ํด๋น ํ์ผ์ ์ฌ์ฉ ์:
switch(blah) {
case "UPDATE"_atom64: ... pass
case "PHYSUPDATE"_atom64: ... pass
...
}
LUA ์ฝ๋์ ์ํธ ์์ฉํ ๋ ๋ฐฉ๊ธ ๋ฌธ์์ด์ ์ฌ์ฉํ๊ณ ๊ฒฝ๊ณ์์ ๋ณํ์ ์ํํ์ต๋๋ค. ๊ทธ ํ์ผ์ "์ต์ " ๋ฒ์ ์ด ์๋๋๋ค. ์ ์์์ ๋ฌธ์์ด๋ก ๋์๊ฐ ๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์์ด ๋ณํ์ ์ํํ๋ ํจ์๋ฅผ ์ถ๊ฐํ์ต๋๋ค(์ปดํ์ผ ์๊ฐ์ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋ฌธ์์ด->์ ์์ ๊ด๊ณ์์ด ํ ๋น์ด ์์). . Atom64/Atom32/๋ชจ๋ ์ ํ์ ํ์ํ ๋ ์ธ์ฝ๋ฉ์ ๋ฐ๋๋ก ํ๋ Visual Studio ๋๋ GDB ํํฐ๋ฅผ ๋ง๋๋ ๊ฒ์ ๊ฐ๋จํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด์ ๊ฐ์ ๊ฒ๋ค์ ํนํ ์ฑ๋ฅ์ ๋ฏผ๊ฐํ ์ฝ๋์์ ๊ทธ๋ฆฌ๊ณ ์ฝ๋๋ฅผ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋๋ ๋ฐ ๋งค์ฐ ์ ์ฉํ๋ฉฐ, ์ด๊ฒ์ ์๋ก์ด ๊ฒ์ด ์๋๋ผ C++11๋ง ํ์ํ์ต๋๋ค.
์ต์ํ C++14๊ฐ Godot ํ์ค์ด ๋์ด์ผ ํ๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. C++17์ ์ข์ ์ ์์ง๋ง(์ผ๋ถ ์ ์ฝ๋์์ ์ผ๋ถ ๋งค์ฐ ์ ์ฉํ ์ฑ๋ฅ ํฅ์), C++14๋ ํ์ฌ ๋ณดํธ์ ์ธ ์ต์ ์ฌ์์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ฌผ๋ก gcc/clang/VisualStudio ๋ฐ ๊ธฐํ ๋ชจ๋ ๊ฒ์ด ์ด์ C++17์ ์ ์ง์ํ๋ฏ๋ก(๊ทธ๋ฆฌ๊ณ C++20์ ํฐ ๋ฉ์ด๋ฆฌ๊น์ง๋) C++17๋ ์ข์ ๋ณด์ ๋๋ค. ๋๋ ์๋ง๋ '๊ฒฝ์ฐ์ ๋ฐ๋ผ'๋ฅผ ์ํด C++14๋ฅผ ์ ํํ ๊ฒ์ ๋๋ค.
@OvermindDL1 ๊ทธ Atom ๋ฌผ๊ฑด์ ๊ต์ฅํฉ๋๋ค. ์ข์ํฉ๋๋ค. ๊ทธ๊ฒ์ ํ์คํ ๊ทธ ์ ํํ ์ผ์ ๊ฝค ๋ง์ด ํ๋ Godot์ ์ ๋ง ์ ๋ง์ ๊ฒ์ ๋๋ค.
๊ทธ Atom ๋ฌผ๊ฑด์ ๊ต์ฅํฉ๋๋ค. ์ฌ๋ํฉ๋๋ค. ๊ทธ๊ฒ์ ํ์คํ ๊ทธ ์ ํํ ์ผ์ ๊ฝค ๋ง์ด ํ๋ Godot์ ์ ๋ง ์ ๋ง์ ๊ฒ์ ๋๋ค.
@vblanco20-1 Godot๊ฐ ์ํ๋ฉด ์ฝ๋๋ฅผ ์์ ๋กญ๊ฒ ํก์ํ ์ ์์ต๋๋ค. ์ด์ C++ ์์ง์์ ์ค๋ซ๋์ ์ฌ์ฉ๋์ด ์์ต๋๋ค. ์์ ์ด๋ฒคํธ ํ๊ทธ, ์ฌ๋ฌผ์ 'ํค'๋ก ์ฌ์ฉํ๋ ์งง์ ๋ฌธ์์ด์ ๋งค์ฐ ์ ์ฉํ์ผ๋ฉฐ Lua/LuaJit์์ ์๋ค๋ก ์ฝ๊ฒ ์ด๋ํ ์ ์์๊ณ ๋๋ฒ๊ฑฐ ํํฐ๊ฐ ํฐ ๋์์ด ๋์์ต๋๋ค.
๋๋ค๊ฐ ์๋ค๋ ๊ฒ์ ์ฌ๊ธฐ์ ๋ณผ ์ ์๋ ๊ฑฐ๋ํ ๋ฌธ์ ์ ๋๋ค.
๋๋ค๊ฐ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์ฝ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ ๋ค๊ณ ์๊ฐํ๋ ์ฌ๋์ ๋๋ฟ์ ๋๊น?
@Faless : ์๋์, ๋น์ ์ด ์ ์ผํ ์ฌ๋์ ์๋๋๋ค. ๋๋ ๋๋ค๊ฐ ์ฝ๊ธฐ ์ด๋ ค์ด ๊ฒ์ด Akien์ด C++ ๋ฒ์ ์ ์ฌ๋ฆฌ์ง ์์ ์ด์ ์ค ํ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋๋ค๋ ์์ ์ธ๋ผ์ธ ํจ์์ผ ๋ฟ์ ๋๋ค. ๋๋ ๋น์ ์ด ๊ทธ๋ค์ ๋ํด "์ฝ๊ธฐ ์ด๋ ต๋ค"๊ณ ๋งํ๋ ๊ฒ์ ๋ชจ๋ฆ ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ค์ ๋น๊ต ํจ์๋ฅผ ๋ณด๋ด๋ Sort ์๊ณ ๋ฆฌ์ฆ์ด๋ ๋๋จธ์ง std ์๊ณ ๋ฆฌ์ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ ๊ฒ์ ํ์ฉํฉ๋๋ค. ๋ํ ์์ ๋ฐฐ์ด(octree ๋ฐ ๊ธฐํ ์์คํ ์ ์์ค ์ฝ๋์์ ์ฌ๋ฌ ๋ฒ ๋ฐ์)์ด ํ์ ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ๊ณ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ std ์๊ณ ๋ฆฌ์ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ๋ ฌ for, ๋ณ๋ ฌ ์ ๋ ฌ ๋ฐ ๋ณ๋ ฌ ๋์ ์ ํตํด ์ป์ ์ ์๋ ํ๋ก๊ทธ๋จ์ ๋ค์ค ์ค๋ ๋ํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋๋ค.
์ฌ๋๋ค์ด ์ฝ๋ ํ์ง, ์ฑ๋ฅ ๋ฐ ์ฌ์ฌ์ฉ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ ๋ ์ด๋ฅผ "์ด์ํ๋ค"๊ณ ์ฐ๋ ๊ฒ์ ์ ๋์ ์ผ๋ก ์์น์ค๋ฌ์ด ์ผ์ ๋๋ค.
๋ด๊ฐ ์ด๋ฏธ ๊ตฌํํ ์ค์ ์:
//old linked list iteration
while (scenario->instances.first()) {
instance_set_scenario(scenario->instances.first()->self()->self, RID());
}
//new (just abstracts above)
scenario->instances.for_each([]( RID& item ){
instance_set_scenario(item, RID());
});
๋ ์ด๋ฐ ๊ฒฝ์ฐ๊ฐ ๋๋ฌด ๋ง์ด ๋ฐ๋ณต๋์ด
//old. Note the 1024 array, wich is hard size, and is wasting memory
int culled = 0;
Instance *cull[1024];
culled = scenario->octree.cull_aabb(p_aabb, cull, 1024);
for (int i = 0; i < culled; i++) {
Instance *instance = cull[i];
ERR_CONTINUE(!instance);
if (instance->object_ID == 0)
continue;
instances.push_back(instance->object_ID);
}
//NEW. not implemented yet. 0 memory usage, can be inlined, and doesnt have a maximum size.
//Its also shorter and will be faster in absolutely every case compared to old version.
scenario->octree.for_each_inside_aabb(p_aabb, [](Instance* instance){
ERR_CONTINUE(!instance);
if (instance->object_ID == 0)
continue;
instances.push_back(instance->object_ID);
});
๋ด๊ฐ ์ด๋ฏธ ๊ตฌํํ ์ค์ ์:
์ฌ๊ธฐ์์ ์ป๋ ์ด๋์ด ๋ฌด์์ธ์ง ํ์คํ์ง ์์ต๋๋ค ...
์ฌ๋๋ค์ด ์ฝ๋ ํ์ง, ์ฑ๋ฅ ๋ฐ ์ฌ์ฌ์ฉ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ ๋ ์ด๋ฅผ "์ด์ํ๋ค"๊ณ ์ฐ๋ ๊ฒ์ ์ ๋์ ์ผ๋ก ์์น์ค๋ฌ์ด ์ผ์ ๋๋ค.
@vblanco20-1 ๊ธ์, ๋๋ ๋ ์์ ์ ์ค๋ช
ํ๋ ค๊ณ ๋
ธ๋ ฅํ ๊ฒ์ด๋ค.
์ฌ๋๋ค์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค.
my_arr.push(
[par1, par2, par3]{
somefunc(par1, par2, par3);
}
);
๊ทธ๋ฐ ๋ค์ ๋ค๋ฅธ ์ฅ์์์:
func = my_arr.front();
func();
์ฝ์ ๋ ์ด๋ค ๊ธฐ๋ฅ์ด ์คํ๋๋์ง, ๋ฌด์์ ์ฐพ์์ผ ํ๋์ง์ ๋ํ ๋จ์๊ฐ ์์ต๋๋ค. ๋์ผํ ํ์ผ์ ์์ผ๋ฉด ๊ด์ฐฎ์ ์ ์์ง๋ง ํด๋น ๋ฐฐ์ด์ ์ฌ๋ฌ ํ์ผ์ ์ ๋ฌํ๋ฉด ์ ์ฒด ์ฝ๋๋ฅผ ์ฝ์ ์ ์๊ฒ ๋ฉ๋๋ค.
@Falless ๊ทํ์ ์๋ ๋๋ค๋ก ํ ์ ์๋ ์ต์ ์ ์์ ๋๋ค(๊ทธ๋ฐ ์ข ๋ฅ์ ์ฌ์ฉ์ ํ์คํ ๊ธ์ง๋์ด์ผ ํฉ๋๋ค).
"์๊ฐ์ ๋ฐ๋ผ" ๋๋ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํ ๋นํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ข์ ์ฌ์ฉ์ด ์๋๋ฉฐ ์บก์ฒ๋ ๋ณ์๊ฐ ๋๋ค๋ฅผ ์คํํ ๋๊น์ง ์ ํจํ์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ ํฐ ์ํ์ด ๋ฉ๋๋ค(์: ํฌ์ธํฐ๋ฅผ ๋๋ฅธ ๋ค์ ๋๋ค๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ๊ฐ์ฒด๋ฅผ ์ญ์ ํ๋ฉด ์บก์ฒ๋ ํฌ์ธํฐ๊ฐ ๋งค๋ฌ๋ ค ์์ต๋๋ค). ์ ๋ ๋๋ค๋ฅผ "์ฆ์" ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ฐ ์๊ณ ๋ฆฌ์ฆ๊ณผ ํจ๊ป ์ฌ์ฉํ๊ธฐ ์ํด ๋๋ค๋ฅผ ๋ฐฉ์ดํ๋ ๊ฒ๋ฟ์ ๋๋ค.
for_each ์์์ for_each๋ ๋ด๋ถ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ณ๊ฒฝ์ ์ํฅ์ ๋ฐ์ง ์์ผ๋ฉฐ(์: ๋ณ์๋ฅผ ์ฝ๊ฐ ์ฌ์ ๋ ฌํ๋ ๊ฒฝ์ฐ) ๋ ๋ง์ "๋ถํฌ๋ช ํ" ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํ์ฉํฉ๋๋ค(์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ " ์ด๋ค ๊ฒ์ด ๋ ์ ์๋ํ๋์ง ํ ์คํธํ๊ธฐ ์ํด ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์์ ๋ค๋ฅธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝํฉ๋๋ค. ์ด๋ฅผ ์์ฉํจ์ผ๋ก์จ "์ฌ์ฉ" ๊ณ์ธต์ ์ฌ์ฉํ๊ธฐ ์ฝ๊ฒ ์ ์งํ๋ฉด์ ๋ถํฌ๋ช ํ๊ฒ ์๋ํ๋ ํจ์ฌ ๋ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
๋ํ ์์ฉ๊ตฌ๋ฅผ ์ค์ด๊ณ ์ฝ๋๊ฐ ์ค์ ๋ก ์ํํ๋ ์์ (์ฐ๊ฒฐ ๋ชฉ๋ก ๋ฐ๋ณต)์ ๋ณด๋ค "๋ช ํํ๊ฒ" ๋ง๋ญ๋๋ค. " first()->self()->self "๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ ์์ฒด๊ฐ ๊ฐ์ ์ ๋๋ค.
๋ฉ๋ชจ๋ฆฌ์ ์๋ ์์๋๋ก ๋ ธ๋๋ฅผ ๋ฐ๋ณตํ๋ "unordered_for_each"์ ๊ฐ์ ๊ฒ์ ๊ฐ์ง ์ ์์ผ๋ฏ๋ก ์ด๊ฒ์ ์ด์ ์ ์ค์ ๋ก ๋ ๋ง์ด ์ฌ์ฉํ ์๋ก ๋์ ๋๋ค๋ ์ ์ ๋ช ์ฌํ์ญ์์ค(ํ ๋น์๋ฅผ ํตํด ๋๋ ์ฐ๊ฒฐ ๋ชฉ๋ก์ด ๋งจ ์์ ์ ์ฅ๋ ๊ฒฝ์ฐ ๋ฐฐ์ด) ๋๋ "reverse_for_each". "์ฐพ๊ธฐ" ๋๋ "์ ๋ ฌ"๊ณผ ๊ฐ์ ๊ฒ์กฐ์ฐจ๋. (์ต์ํ C++20 ๋ฒ์๊ฐ ๋ณํฉ๋ ๋๊น์ง๋ std::algorithms๋ฅผ ๊ทธ๋ค์ง ๊ถ์ฅํ์ง ์์ต๋๋ค. ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ผ๋ถ๋ก ์์ฒด ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ ๊ฒ์ด ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ์ข์ต๋๋ค)
Lambda๋ ๊ธฐ๋ณธ์ ์ผ๋ก Epic Games๊ฐ Sort, Partition, Filter, RemoveAll, Find ๋ฑ๊ณผ ๊ฐ์ ์์ฒด ์๊ณ ๋ฆฌ์ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป C++11์์ ์ธ๋ฆฌ์ผ ์์ง์ผ๋ก ํ์ฉํ ์ฒซ ๋ฒ์งธ ๊ฒ์ด์์ต๋๋ค. ๊ทธ ์ดํ๋ก ๋ ๋ค ์์ค ์ฝ๋์์ ๊ฝค ์์ฃผ ์ฌ์ฉ๋์์ต๋๋ค. ์์ง ์ฝ๋ ๋ฐ ๊ฒ์ ํ๋ ์ด ์ฝ๋์์
์ฟจ, ์ ์ด๋ ์ฐ๋ฆฌ๋ ๋๋ฐ๊ฐ ์ฑ๋ฐฐ๊ฐ ์๋๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฏธ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ง ์๋ ๋ฐฉ๋ฒ์ ๋ํ ํ๋์ ๊ท์น์ ์ ์ํ์ต๋๋ค.
๊ณต์ฐ์ ๋ํด ๋ ์ฐ๊ตฌํ๊ฒ ์ต๋๋ค.
2018๋ 12์ 8์ผ ํ ์์ผ 17:06 vblanco20-1 < ์๋ฆผ @github.com ์์ฑ:
@Faless https://github.com/Faless ๊ทํ์ ์๋
๋๋ค๋ก ํ ์ ์๋ ์ต์ ์ ๊ฒฝ์ฐ(๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฐ ์ข ๋ฅ์ ์ฌ์ฉ๋ฒ์ ํ์คํ
๊ธ์ง)."์๊ฐ์ ๋ฐ๋ผ" ๋๋ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ข์ ์ฌ์ฉ์ด ์๋๋๋ค.
ํ ๋นํ๊ณ ์บก์ฒ๋ ๋ณ์๋ก ํฐ ์ํ์ด ๋ฉ๋๋ค.
๋๋ค๋ฅผ ์คํํ ๋๊น์ง ์ ํจํ์ง ์๊ฒ ๋ฉ๋๋ค(์:
ํฌ์ธํฐ๋ฅผ ์บก์ฒํ ๋ค์ ๋๋ค๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ๊ฐ์ฒด๋ฅผ ์ญ์ ํฉ๋๋ค.
์บก์ฒ๋ ํฌ์ธํฐ๊ฐ ๋งค๋ฌ๋ ค ์์). ๋๋ ๋จ์ง ๋๋ค๋ฅผ ์นํธํ ๋ฟ์ด๋ค.
๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ฐ ์๊ณ ๋ฆฌ์ฆ๊ณผ ํจ๊ป ์ฌ์ฉ, ์ฌ์ฉ ์์น
"๊ณง".for_each ์์์ for_each๋ ๋ด๋ถ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.
๋ฐ์ดํฐ ๊ตฌ์กฐ(์: ๋ณ์๋ฅผ ์ฝ๊ฐ ์ฌ์ ๋ ฌํ๋ ๊ฒฝ์ฐ),
๋ ๋ง์ "๋ถํฌ๋ช ํ" ๋ฐ์ดํฐ ๊ตฌ์กฐ(๊ฐ๋ฐ์๊ฐ
์ด๋ค ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํ ์คํธํ๊ธฐ ์ํด ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์์ ๋ค๋ฅธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก "์ฝ๊ฒ" ๋ณ๊ฒฝ
๋ ์ ์๋ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์์ฉํ๋ฉด ํจ์ฌ ๋ ๋ง์ ๊ฒ์ ๊ตฌํํ ์ ์์ต๋๋ค.
"์ฌ์ฉ"์ ์ ์งํ๋ฉด์ ๋ถํฌ๋ช ํ๊ฒ ์๋ํ๋ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ
์ฌ์ฉํ๊ธฐ ์ฌ์ด ๋ ์ด์ด.๋ํ ์์ฉ๊ตฌ๋ฅผ ์ค์ด๊ณ ์ฝ๋๊ฐ ๋ฌด์์ธ์ง ๋ "๋ช ํํ๊ฒ" ๋ง๋ญ๋๋ค.
์ค์ ๋ก ์ํ(์ฐ๊ฒฐ ๋ชฉ๋ก ๋ฐ๋ณต). "๋ฅผ ์์ ๊ธฐ๋ง ํ๋ฉด
first()->self()->self "๋ ์์ฒด์ ์ผ๋ก ๊ฐ์ ๋ ๊ฒ์ ๋๋ค.์ด๊ฒ์ ์ด์ ์ ์ค์ ๋ก ๋ ๋ง์ด ์ฌ์ฉํ ์๋ก ๋์ ๋๋ค๋ ์ ์ ๋ช ์ฌํ์ญ์์ค.
๋ฐ๋ณต๋๋ "unordered_for_each"์ ๊ฐ์ ๊ฒ์ ๊ฐ์ง ์ ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ์ ์๋ ์์๋๋ก ๋ ธ๋๋ฅผ ํ ๋นํฉ๋๋ค(ํ ๋น์๋ฅผ ํตํด ๋๋
์ฐ๊ฒฐ ๋ชฉ๋ก์ ๋ฐฐ์ด์ ๋งจ ์์ ์ ์ฅ๋จ) ๋๋ "reverse_for_each"์ ๋๋ค. ์ฌ์ง์ด ๋ฌผ๊ฑด
"์ฐพ๊ธฐ" ๋๋ "์ ๋ ฌ"์ฒ๋ผ. (๋๋ std::algorithms๋ฅผ ๊ทธ๋ค์ง ์ถ์ฒํ์ง ์๋๋ค.
Ranges๊ฐ ๋ณํฉ๋ ๋ C++20๊น์ง๋ ์ต์ํ. ์์ ์ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ
๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ผ๋ถ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ์ข์ต๋๋ค)Lambda๋ ๊ธฐ๋ณธ์ ์ผ๋ก Epic Games๊ฐ C++11์์ ์ฒ์์ผ๋ก ํ์ฉํ ๊ฒ์ ๋๋ค.
Sort์ ๊ฐ์ ์์ฒด ์๊ณ ๋ฆฌ์ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ์ธ๋ฆฌ์ผ ์์ง,
Partition, Filter, RemoveAll, Find ๋ฑ ๊ทธ ์ดํ๋ก๋ ๊ฝค ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
์์ง ์ฝ๋์ ๊ฒ์ ํ๋ ์ด ์ฝ๋ ๋ชจ๋์์ ์์ค ์ฝ๋์ ์ฌ์ฉโ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/godotengine/godot/issues/9694#issuecomment-445474001 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/ABnBbvBTxThAh0v8AfFCdGsSv2HFnEz6ks5u2_GKgaJpZM4ObOio
.
์ฝ๋๋ฒ ์ด์ค์ ์ ์ง ๊ด๋ฆฌ์ฑ์ ํฅ์์ํค๋ C++11 ๊ธฐ๋ฅ:
override
๋ฐ final
nullptr
explicit
ํค์๋์ถ์ ์ง์ ํฅ์์ํค๋ C++11 ๊ธฐ๋ฅ:
Vector<Vector> >
์์)[[nodiscard]]
(C++17 ?) ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐ ํ์ญ์์ค
์๋ก์ด ๊ฒ์ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ด 1~2๊ฐ ์๋ค๊ณ ํด์ ์ต์ ๋ฒ์ ์ ์ฑํํด์ผ ํ๋ ๊ฒ์ ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด์ ์ด ๊ฐ์น๊ฐ ์๊ธฐ ๋๋ฌธ์ C++11 ์ด์ธ์ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ์ํ์ง ์์ต๋๋ค.
C++์ด ๋ฐ์ ํจ์ ๋ฐ๋ผ stl์ ์ ์ ๋ ์ปค์ง๊ณ ์ ์ฒ๋ฆฌ๊ธฐ ๋จ๊ณ์์ ํ๋ก์ ํธ์ ์๋ฐฑ ์ค์ด ์ถ๊ฐ๋ฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
์ ๋ ์๋ฉ๋๋ค? ์คํ๋์ง ์๋ ์ฝ๋๋ ์ปดํ์ผ๋ฌ ๋ฒ๊ทธ๊ฐ ์๋ ํ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น์ง ์์์ผ ํ๋ฉฐ ๋ฆด๋ฆฌ์ค์์๋ ์ต์ข ๋ฐ์ด๋๋ฆฌ์ ์ ํ ํฌํจ๋์ด์๋ ์ ๋ฉ๋๋ค. ๋ง์ ๊ฒฝ์ฐ์ ์ ์ ํ ์ด๋ ์๋ฏธ๋ฅผ ๊ฐ๋ ๊ฒ๋ง์ผ๋ก๋ ์ผ๋ถ ์์ญ์์๋ ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋๋ฉฐ ์ด์ ์์์๋ ์ ๋ฐ์ดํธ๋ ์ง์๋ฌธ์ด ๋ค๋ฅธ ๊ธฐ๋ฅ ์ค์์ ์ฑ๋ฅ ํฅ์์ ๊ฐ์ง ์๋ ์์ต๋๋ค.
@OvermindDL1 ์, ์ด๋ก ์ ๊ทธ๋์ผ ํฉ๋๋ค.
์ด๊ฒ์ ํ์ธํ์ญ์์ค : https://twitter.com/zeuxcg/status/1085781851568914432
๋๋ ์ต๊ทผ์ ์์
๋ฏธ๋์ด์์ ์ด์ ๊ฐ์ ๋ค์ํ ์ฌ๋ก๋ฅผ ๋ณด์์ต๋๋ค. ๊ทธ๊ฒ์ "์ ๋ก ๋น์ฉ ์ถ์ํ"๊ฐ ๋์ด์ผ ํ๋ ๊ฒ์ฒ๋ผ ์๋๋๋ค.
@lupoDharkael ๊ทธ ํธ์ํฐ ์ค๋ ๋(๋ง์นจ๋ด ๋ก๋๋๊ณ ๋๋ฉด ๊ฑฐ๋ฃฉํ ์์ฐ ํธ์ํฐ๋ ๋์ฐํ ์ธํฐํ์ด์ค์
๋๋ค... ์ ๋ ๊ทธ๊ฒ์ ๊ณ์ ์๊ณ ์์ต๋๋ค...) libstdc++์ math.h๊ฐ C++17 ๋ชจ๋์์ ๋ ํฌ๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์๊ฐ ์๋์ ๋ํด์๋ง ์ด์ผ๊ธฐํฉ๋๋ค(์ฌ๊ธฐ์ libc++์๋ ํด๋น ๋ฌธ์ ๊ฐ ์์) ๋ ๋์ ๋ฐํ์ ์๋๋ฅผ ์ํ ๋ ๋ง์ ์ค๋ฒ๋ก๋ ๋ฐ ๊ธฐ๋ฅ์ผ๋ก ์ธํด Math.h๋ฅผ ๊ฐ์ ธ์ค๋ ๋ชจ๋ ์ปดํ์ผ์ ์ต์ stdlib ๋์ ํน์ ์ด์ stdlib๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ปดํ์ผ ์๊ฐ์ด ์ฝ 300ms ์ฆ๊ฐํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ฐํ์ ์ฑ๋ฅ์ ๋ํด ์๋ฌด ๊ฒ๋ ์ธ๊ธํ์ง ์์ต๋๋ค(์ฌ์ฉ๋ ๊ธฐ๋ฅ์ ๋ฐ๋ผ ๋ ๋์ C++ ๋ชจ๋์์๋ง ๋ ๋น ๋ฅธ ๊ฒ์ ๋ณด์๊ณ ์ต์
์ ๊ฒฝ์ฐ ๋์ผํ ์๋). It's not as "zero cost abstractions" as it should.
์ ๊ดํด์๋ ์์ง ๋น์ ์ด ๋ฌด์์ ์ธ๊ธํ๊ณ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๊น? ์ด์ stdlib์์ math.h๋ก ์ปดํ์ผํ ๋ ์ปดํ์ผ ์๊ฐ์ด ์ฝ 300ms ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ ๋งํฌํ ์ค๋ ๋๊ฐ ๊ทธ์ ์๋ฌด ๊ด๋ จ์ด ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฏ๋ก ๋ฐํ์ ์ฑ๋ฅ ๋ฌธ์ ์ ๋ํ ์ค์ ๋ณด๊ณ ์์ ๋ํ ๋งํฌ๊ฐ ์์ต๋๊น? ์ด์จ๋ ์ปดํ์ผ๋ ๊ฐ์ฒด์ ์ปดํ์ผ ์๊ฐ์ด 300ms ์ฆ๊ฐํ๋ ๋ฌธ์ ๊ฐ ์๋์ง ํ์คํ์ง ์์ต๋๊น?
๊ทธ๊ฒ์ ๋ํด ๋ ์กฐ์ฌํ๊ฒ ์ต๋๋ค.
๋น์ฉ์ ์ด์ ๊ฐ ์๋ค๋ ๊ฒ์ ์ดํดํ์ง๋ง ์ปดํ์ผ ์๊ฐ์ด ๊ธธ์ด์ง๋ ๊ฒ์ ์ค์ ๋ก ์ ์๊ฒ ๋ฐ๊ธฐ๋ฅ์
๋๋ค. ๋๋ ๋ฉํ๋ง ๊ฐ์ง๊ณ ์๊ณ ์์ง์ ๋ํ ๊ธฐ๋ฅ ์์
์๋ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. ๋ชจ๋ ๋ณ๊ฒฝ ํ์ ์ปดํ์ผ+๋งํฌ ํ๋ก์ธ์ค๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํ๋ ์๊ฐ์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์๋ก์ด ๋ฒ์ ์ ์ฌ์ฉํ๊ธฐ ์ํด ์ ๋นํ ์ด์ ์์ด ๋ ๋ง์ด ๋๋ฆฌ๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋๋๋ค.
๋๋ ๋ฉํ๋ง ๊ฐ์ง๊ณ ์๊ณ ์์ง์ ๋ํ ๊ธฐ๋ฅ ์์ ์๋ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. ๋ชจ๋ ๋ณ๊ฒฝ ํ์ ์ปดํ์ผ+๋งํฌ ํ๋ก์ธ์ค๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํ๋ ์๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
ccache๊ฐ ์ค์น๋์ด ์์ผ๋ฉด ์ฆ๋ถ ๋น๋ ํ๋ก์ธ์ค์์ ๋งํฌ์ ๋ง์ ์๊ฐ์ด ์์๋ฉ๋๋ค. ๋งํฌ์ ld
gold
๋ฅผ ์ฌ์ฉํ์ฌ 1์ด ์ ๋ ์๊ฐ์ ๋จ์ถํ ์ ์์ผ๋ฉฐ lld
๋ก ์ ํํ์ฌ ๋ ์ต์ ํํ ์ ์์ต๋๋ค.
์ค ํ์คํ, ๋ฐฑ์ ๋น๋๋ก์ ccache์ ninja ๋ชจ๋์ ๋ํด ์ถฉ๋ถํ ์ข๋ค๊ณ ๋งํ ์๋ ์์ต๋๋ค(์๋ฅผ ๋ค์ด cmake๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ). ๋ ๋ค ์๊ฐ ์ ๋ง์ด ์ ์ฝํฉ๋๋ค!
๊ฒ๋ค๊ฐ Unity ๋น๋๋ ๋๋ผ์ธ ์ ๋๋ก ๋๋์ต๋๋ค. ์ฌ๊ธฐ์์ ํ๋ก์ ํธ์ ๋ชจ๋ cpp ํ์ผ์ ํฌํจํ๋ ์ unity.cpp
์ ๋์ ํ์ผ์ ๋ง๋ค ์ ์์ง๋ง ์ค์ ๋ก๋ ์ผ๋ฐ์ ์ผ๋ก '๋ชจ๋'๋น unity cpp ํ์ผ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ์ปดํ์ผ ์๊ฐ์ ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋์ ํจ์ฌ ๋น ๋ฅด๊ฒ ์ปดํ์ผํ๊ณ ๋งํฌํ ์ ์์ต๋๋ค. ์ฆ๋ถ ์ฌ๊ตฌ์ถ์๋ ๋ ์ ์ฉํ๊ณ ๋ฆด๋ฆฌ์ค ๋น๋์๋ ๋ ์ ์ฉํฉ๋๋ค.
๋๋ฏธ์ ํ๋๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด:
static_assert
์๋ฅผ ๋ค์ด SpatialMaterial::MaterialKey
ํฉ์งํฉ์ ๊ตฌ์กฐ์ฒด์ ํฌ๊ธฐ๊ฐ uint64_t์ ๊ฐ๋ค๊ณ ๊ฐ์ ํ์ง๋ง ๋ด๊ฐ ๋งํ ์ ์๋ ํ ์ด๋์์๋ ์ฃผ์ฅ๋์ง ์์ต๋๋ค.
๊ฑฐ๊ธฐ์ static_assert(sizeof(MaterialKey) == sizeof(uint64_t))
๋ฅผ ์น๊ณ ์ถ์์ง๋ง ํ ์ ์์์ต๋๋ค.
๋ค๋ฅธ ํ๋๋ ์๋ ์์ฉ๊ตฌ๋ฅผ ๋๋ฌด ๋ง์ด ์์ฑํ์ง ์๊ณ ๋ถํ์ํ ์ฐธ์กฐ ๊ณ์ฐ์ ์ฌ์ฉํ์ง ์๊ณ ํ๊ดด ์ ์ ์ ํ ์ ๋ฆฌ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด unique_ptr์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
Godot์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ฒ์ ์ ํ๋ ์ฌ๋์ผ๋ก์ ์ 2์ผํธ(๋๋ 20์ผํธ)๋ฅผ ์ ๊ณตํ๊ณ ์ถ์ต๋๋ค. ์ ๋ ํ์ฌ _Battle for Wesnoth_๋ฅผ Godot๋ก ์ด์ํ๋ ์์ ์ ๊ฐ๋ ํ๊ณ ์์ ์ค์ ๋๋ค. ์ด์ ํ๋ก ํธ ์๋(์๋ํฐ์ GDScript API)๊ฐ ํ๋ฅญํฉ๋๋ค! ๋ช ๊ฐ์ง ๊ฑฐ์น ๋ถ๋ถ ์ธ์๋ ์ง๊ธ๊น์ง๋ ์ข์ ์๋๋ก ์งํํ ์ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ(ํ)๋ ์ธ์ ๊ฐ๋ ๋ฐฑ์๋(์์ง)์ ๋ํ ํจ์น๋ฅผ ์ ๊ณตํ ๊ฒ์ด๋ผ๊ณ ์์ํ์ต๋๋ค. ์ด๋ฅผ ์ํด ์ด๋ฒ ์ฃผ ์ด์ git repo๋ฅผ ๋ณต์ ํ๊ณ C++์์ ์ฌ๊ธฐ์ ๊ธฐ ํ๊ณ ๋ค๊ธฐ ์์ํ์ต๋๋ค. ์์งํ ๋งํด์... ์ ๋ ์ฝ๊ฐ ์ค๋งํ์ต๋๋ค.
์ ๋ Wesnoth์ ์ค๋๋ ์ฌ์ฉ์ ์ ์ ์์ง์ ํํ๋ก ๋๊ท๋ชจ C++ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ ๊ฒฝํ์ด ์์ต๋๋ค. ์ญ์ C++03์ผ๋ก ์์ํ์ง๋ง C++11 ์ด์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋๋ก ํ๋ํ๋์์ผ๋ฉฐ ์ด์ C++14์ ํธํ๋ฉ๋๋ค. ๋๋ ๊ทธ ํ๋ํ ๋
ธ๋ ฅ์ ์ฃผ๋ํ๊ณ (์ข
์ข
๋๋ฌด ์ด์ฑ์ ์ผ๋ก) ์ฐ๋ฆฌ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ํจ์ฌ ๋ ์ฝ๊ธฐ ์ฝ๊ณ ์์
ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฌผ๋ก ์ ๋ ์์ํ C++03 ์ฝ๋๋ฒ ์ด์ค๋ก ๊ด๋ฒ์ํ๊ฒ ์์
ํ ์ ์ด ์์ต๋๋ค. ์ต์ C++ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ C++๋ฅผ ๋ฐฐ์ ์ต๋๋ค. ํ์ง๋ง auto
, range-for ๋ฐ lambdas์ ๊ฐ์ ๊ฒ๋ค์ด ์ฝ๋๋ฅผ ๋ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ ๋ค๋ ์๊ฐ์ ์ ๋ง... ๋งค์ฐ ์ด์ํฉ๋๋ค.
auto
๋ฅผ ๋จ์ฉํ๊ณ ๋จ์ฉํ๋ ๊ฒ์ด ํ์คํ ๊ฐ๋ฅํ์ง๋ง ํฉ๋ฒ์ ์ธ ์ฉ๋๋ ๋ง์ด ์์ต๋๋ค. Wesnoth ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์
๋ฐ์ดํธํ ๋ auto
๋ฅผ ๋ฐฐํฌํ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ฅ์ ์ค ํ๋๋ ๋ฐ๋ณต์๋ฅผ ์ฌ์ฉํ๋ for ๋ฃจํ์์ต๋๋ค. ์ด์ ์๋ ๋ค์๊ณผ ๊ฐ์ ํญ๋ชฉ์ด ์์์ต๋๋ค.
for(std::vector<T>::iterator foo = container.begin(); foo != container.end(); ++foo) {}
์ด๋ ๊ฒ์ด ์ง์ ๋ถํด! ์ค์ ๋ก iterator๊ฐ ํ์ํ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด ํ์ต๋๋ค.
for(auto foo = container.begin(); foo != container.end(); ++foo) {}
์, ์ด์ ๋ช ์์ ๋ฐ๋ณต๊ธฐ ์ ํ์ ๋ชจ๋ฅด์ง๋ง ๊ฑฐ์ ์ ํ์ ๊ฐ ์์ต๋๋ค. ๋๋ ์ปจํ ์ด๋๊ฐ ์ผ๋ถ ํ์ผ์ ์ ์ธํ๋ฉด ๋ ์ด๋ ค์์ง๋ค๋ ๊ฒ์๋ฌผ์ ์ฌ๊ธฐ์์ ์ฝ์์ง๋ง ์ค์ ๋ก ํ๋ ์ฝ๋ ํธ์ง๊ธฐ์ ์ธํ ๋ฆฌ์ผ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ๋ค์ง ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด range-for๋ก ์ ํํฉ๋๋ค.
for(const auto& foo : container) {}
ํ์ดํ๋ ํจ์ฌ ๋น ๋ฅด๊ณ ๊ฐ๊ฒฐํฉ๋๋ค. ๋ฃจํ ๋ด์์ ๋ฐ๋ณต์๋ฅผ ์ญ์ฐธ์กฐํ๊ฑฐ๋ ์ธ๋ฑ์ค๋ฅผ ์ถ์ ํ๋ ๊ฒ์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์ด ์ ์ฒด ์ปจํ ์ด๋๋ฅผ ๋ฐ๋ณตํ๊ณ ์๋ค๋ ๊ฒ์ด ๋งค์ฐ ๋ถ๋ช ํฉ๋๋ค. ๋ฐ๋ณต์๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ์ต์ํ์ง ์์ ์ฌ๋๋ค์ ๋ฃจํ๊ฐ ์ฒ์๋ถํฐ ๋๊น์ง ์ค์ ๋ก ์งํ๋๋์ง ๋ค์ ํ์ธํด์ผ ํฉ๋๋ค.
์ฌ๊ธฐ์์ range-for ๋ฃจํ์์ auto
๋ฅผ ์ฌ์ฉํ๋ฉด ์ถ๊ฐ ์ด์ ์ด ์์ต๋๋ค. ์ปจํ
์ด๋ ์ ํ์ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ ์
๋ฐ์ดํธ๋ฅผ ๊ธฐ์ตํด์ผ ํ๋ ํญ๋ชฉ์ด ํ๋ ์ค์ด๋ญ๋๋ค! ๋๋ ์ด๋ฌํ ๊ฒ๋ค์ด ์ฝ๋๋ฅผ ๋ ์ฝ๊ฑฐ๋ ์ดํดํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ ๋ค๋ Juan์ ์ฃผ์ฅ์ ์ ๋ง๋ก ์ดํดํ ์ ์์ต๋๋ค. ์ ์๊ฒ๋ ์ ๋ฐ๋์
๋๋ค.
๊ทธ๋ Godot์ ์ํ ๋น๋์ค์์ ๋๋ค๋ ์ธ๊ธํ์ต๋๋ค. ๋ค์ ๋งํ์ง๋ง, ๊ทธ๊ฒ๋ค์ ๋จ์ฉํ๋ ๊ฒ์ ํ์คํ ๊ฐ๋ฅํ์ง๋ง ๋ํ ์์ฒญ๋๊ฒ ์ ์ฉํ ๋๊ตฌ์ด๊ธฐ๋ ํฉ๋๋ค! ๋ค์์ C++11์ ์ฌ์ฉํ๊ธฐ ์ ์ Wesnoth์ ์ฝ๋๋ฒ ์ด์ค์์ ๋ณธ ์ผ๋ฐ์ ์ธ ํจ๋ฌ๋ค์์ ๋๋ค.
struct sort_helper {
operator()(const T& a, const T& B) {
return a < b;
}
}
void init() const {
std::vector<T> foo;
foo.push_back(T(1));
foo.push_back(T(2));
foo.push_back(T(3));
std::sort(foo.begin(), foo.end(), sort_helper);
}
๊ธธ๊ณ ์ง์ ๋ถํ ์ฝ๋ ํฝ์ฐฝ. ๋ค์์ C++11์์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
void init() const {
std::vector<T> foo {
T(1),
T(2),
T(3),
};
std::sort(foo.begin(), foo.end(), [](const T& a, const T& b) { return a < b; });
}
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์
๋๋ค! ๊ทธ๋ฆฌ๊ณ ์, T์ ๋ํด operator<
๋ฅผ ๊ตฌํํ ์๋ ์๊ณ std::sort
๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ์ ์์ ์ ๋ณด์ฌ์ค๋๋ค. ๋ค์ ๋งํ์ง๋ง, ์๋ง๋ ๊ทธ๊ฒ์ ๋จ์ง ํ๋์ ์ธ C++๋ก ๋ฐฐ์ฐ๊ณ ๊ฑฐ์ ๋
์ ์ ์ผ๋ก ์์
ํ ๊ฒ์ผ ์ ์์ง๋ง, ์ ์ ํ ๊ฒฝ์ฐ auto
, range-for ๋ฐ lambdas์ ๊ฐ์ ๋๊ตฌ๋ฅผ ๋ฌด์ํ๋ ๊ฒ์ ๋ฐ์ ํ๋๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด๊ฒ์ ๋๋ฅผ ๋ค์ ์์ ์ผ๋ก ์ด๋๋๋ค. ๋๋ Godot๊ฐ ๋ด๋ถ์ ์ผ๋ก STL ์ ํ ๋์ ์ ์์ฒด ์ฌ์ฉ์ ์ ์ ์ ํ์ ๋ง์ด ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์์์ฐจ๋ ธ์ต๋๋ค. auto
์ ๊ฐ์ ์ฝ๋ ๊ฐ๋
์ฑ์ ๋ํ ์ฐ๋ ค๊ฐ ์๋ ๊ฒฝ์ฐ STL ์ ํ๋ณด๋ค ์ฌ์ฉ์ ์ ์ ์ฝ์ด ์ ํ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ๋์ ์ผ๋ก ์ํด์
๋๋ค! ๋ฉฐ์น ์ ์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ฒ์ํ๋ค๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ๋ง์ด ๋ฐ๊ฒฌํ์ต๋๋ค.
container.push_back(T(args));
์ด๊ฒ์ ๋นํจ์จ์ ์
๋๋ค. push_back
(์ ์ด๋ std::vector
์ธก๋ฉด์์) const ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ์ฐ์ฐ์๋ ๋ถํ์ํ ๋ณต์ฌ๋ณธ์ ์์ฑํฉ๋๋ค. emplace_back
๋ฅผ ์ฌ์ฉํ๋๋ก ํจ์น๋ฅผ ๋ง๋ค๊ณ ์ถ์์ง๋ง ... ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค๊ฐ ์ฌ์ฉ์ ์ ์ ์ปจํ
์ด๋ ์ ํ์ ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค ๐
Wesnoth์ ์ค๊ณ์ ๋ํ ํฐ ๋ฌธ์ ์ค ํ๋์ด์ ์ ์์ง(์ด ๊ฒฝ์ฐ Godot)์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ ์ฃผ์ ์์ธ ์ค ํ๋๋ Wesnoth๊ฐ Not Invented Here ์ฆํ๊ตฐ์ ํฌ๊ฒ ๊ฒช์๋ค๋ ๊ฒ์
๋๋ค. Boost์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋์ ๋ ๋๋ง ํ์ดํ๋ผ์ธ์ ์ฌ์ฉ์ ์ง์ ์ด์๊ณ UI ํดํท์ ์ฌ์ฉ์ ์ง์ ๋์์ผ๋ฉฐ ๋ฐ์ดํฐ/์คํฌ๋ฆฝํ
์ธ์ด๋ ์ฌ์ฉ์ ์ง์ ๋์์ต๋๋ค.... ์์ ์ ์ ์ ์์ต๋๋ค. Godot ํฌํธ์์ ์์
์ ์์ํ๊ธฐ ์ ์ ํ๋์จ์ด ๊ฐ์ ๋ ๋๋ง์ ๊ตฌํํ๋ ค๊ณ ์๋ํ์ง๋ง ์คํจํ์ต๋๋ค(์ด ์์ ๊น์ง ์ฐ๋ฆฌ๋ CPU ๊ธฐ๋ฐ ํ๋ฉด/์คํ๋ผ์ดํธ ๋ ๋๋ง์ ์ฌ์ฉํ์ต๋๋ค. 2019๋
์๋ X_X๋ฅผ ์๊ณ ์์ต๋๋ค). SDL์ Texture
API์๋ ์
ฐ์ด๋ ์ง์์ด ์์๊ณ ์
ฐ์ด๋ ์ง์์ด ํ์ํ์ต๋๋ค. ๊ฒฐ๊ตญ ๋๋ ๊ฐ๋ฅํ ํ ์์ฒด ๋ ๋๋ฌ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ํ๋ก์ ํธ์ ๋ถํ์ํ ์ ์ง ๊ด๋ฆฌ ๋ถ๋ด์ ์ค ๊ฒ์ด๋ผ๊ณ ๊ฒฐ์ ํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ํต์ฌ ๊ฐ๋ฐ์๊ฐ ๊ฑฐ์ ์์๊ณ , Godot์ ๊ฐ์ ์์ง์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์ ์๋ ์๋ฒฝํ๊ฒ ํ๋ฅญํ๊ณ ์ ๊ด๋ฆฌ๋ ๋ ๋๋ฌ๊ฐ ์์ ๋ OpenGL(๋๋ OGL์ ์ญ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ Vulkan)์ ์์ฑํ ์ ์๋ ์ฌ๋์ ์ฐพ๋ ๊ฒ์ ๋ถํ์ํ ๊ณ ํต์ด์์ต๋๋ค. ๋์ ์.
์ฌ๋ด์์ ๋ชจ๋ ๊ฒ์ ๊ตฌํํ๋ ๊ฒ์ด ๋์ ์๊ฐ์ด ๋ ์ ์๋ ์ข์ ์๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ๋ฅผ ์ ๊ธฐํฉ๋๋ค. ์, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์์ผ๋ก์จ ๋ฐ์ด๋๋ฆฌ ํฌ๊ธฐ๋ฅผ ์ฝ๊ฐ ์ค์ผ ์๋ ์์ง๋ง ๋ง๋ํ ์ ์ง ๊ด๋ฆฌ ๋ถ๋ด์ ์ง๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ push_back
ํธ์ถ์ emplace_back
๋ก ๋ณํํ๋ ๊ฒ์ ์ฝ๋๋ฅผ ๋ ๊นจ๋ํ๊ณ ์ฑ๋ฅ์ด ์ข๊ฒ ๋ง๋ค ์ ์๋ ๋งค์ฐ ๋ฎ์ ๊ฒฐ๊ณผ์
๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉ์ ์ ์ vector
์ ํ์ด ์๊ธฐ ๋๋ฌธ์ ๋ด๋ถ ๊ตฌ์ฑ์ ์ํ๋ ๊ฒฝ์ฐ ๋๊ตฐ๊ฐ ์๋์ผ๋ก ๊ตฌํํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ชจ๋ ์ฌ์ฉ์ ์ ์ ์ ํ์์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค!
๋ ํฐ ๋ฌธ์ ๋ ์ง์
์ฅ๋ฒฝ์ด ๋์์ง๋ค๋ ์ ์ด๋ค. C++ STL ์ ํ์ ๊ธฐ๋ํ๋ Godot ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ดํด๋ณด์์ต๋๋ค. ์ด๋ฅผ ์ฐพ์ง ๋ชปํ๋ค๋ ๊ฒ์ ๋ ๋๋ ๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ ์ด์ ์์ง์ด ์ ๊ณตํ๋ ์ ํ๊ณผ ๊ฐ API์ ํจ๊ป ์ ๊ณต๋๋ ์ ํ์ ์ ํํ ์์์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ด๊ฐ ์ํ๋ std::map
? ์๋์, dictionary
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ทธ๊ฒ์ ๋จ์ง ๋ฉ์ธํ
์ด๋์ ์ถ์ ํ๋ค๊ฒ ๋ง๋ค๊ณ ์๋ก์ด ๊ธฐ์ฌ์๋ค์ ์ผ์ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก, ํ ๊ฐ์ง์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ ๋ก๋ ๋ค๋ฅธ ์ฝ๋๊ฐ... ์ฝ์ ์ ์๋ ์ฝ๋๊ฐ ์๋๋๊น?
์ฝ 1๋
์ Wesnoth์ 1.14 ๋ฆด๋ฆฌ์ค ๋ฐ Steam ์ถ์๋ฅผ ๋ง๊ฐํ๋ฉด์ ์ ๋ erase()
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ์ธํ๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก std::list
์ธ ์ฌ์ฉ์ ์ ์ ์ปจํ
์ด๋ ์ ํ์ ์ ๊ฑฐํ๊ธฐ ์ํ ๋ฆฌํฉํ ๋ง ํ๋ก์ ํธ์ ์ฐฉ์ํ์ต๋๋ค. ๋ฐ๋ณต์. ๋ค์์ ๋ฌธ์ ์ ์ปค๋ฐ ์์น ์
๋๋ค. ์ ๋๋ก ํ๋ ค๋ฉด ๊ทธ ํ์ ์ถ๊ฐ ์์
์ด ํ์ํ์ง๋ง ๊ฒฐ๊ณผ๋ ํจ์ฌ ๋ ๊ฐ๋จํ๊ณ ์ดํดํ๊ธฐ ์ฌ์ฐ๋ฉฐ ๋ ๋ถํฌ๋ช
ํ ์ฝ๋์์ต๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ๋งค์ฐ ์ ์ฉํ C++11 ๊ธฐ๋ฅ์ ๋ถ๋ฒํํ๊ณ STL ์ ํ๋ณด๋ค ์ฌ์ฉ์ ์ ์ ์ ํ์ ๊ณ ์ํ๋ ๊ฒ์ ์ฅ๊ธฐ์ ์ผ๋ก Godot์ ๋ฐฉํด๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ฆฌํฉํ ๋งํ๋ ๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง(์ ๋ฅผ ๋ฏฟ์ผ์ธ์, ์ ๋ ์๋๋ค), ํ์ฌ ์ํฉ์์๋ ๊ฒฐ๊ตญ catch-22๋ก ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. STL(๋ผ๊ฑฐ ๋ฐ์ด๋๋ฆฌ ํฌ๊ธฐ ๋ฑ) ์ฌ์ฉ์ ๋จ์ ์ ํผํ๋ ค๊ณ ํ๋ฉด ์๋ก์ด C++ ํ์ค์์ ๋ ๋์ ์ฑ๋ฅ๊ณผ ๊น๋ํ โโ์ฝ๋๋ก ์ ํํ๋ ๊ฒ์ด ์ ์ ๋ ์ด๋ ค์์ง ๊ฒ์ ๋๋ค. ๋ชจ๋ ์ฌ์ฉ์ ์ ์ ์ ํ์์ ๋ด๋ถ ๊ตฌ์ฑ์ ๊ตฌํํ๋ ๊ฒ์ ํน๋ณํ ๊ธฐ๋ํ๋ ์ฌ๋์ ์๋ฌด๋ ์์ ๊ฒ์ ๋๋ค. ๐ฌ
์ฌ๊ธฐ์์ ๋ด ์๊ฒฌ์ด ํฐ ์๋ฏธ๊ฐ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง C++03์์ ์ต์ C++๋ก ์ด๋ํ ๋๊ท๋ชจ C++ ์ฝ๋๋ฒ ์ด์ค๋ก ์์ ํ ์ฌ๋์ ๊ด์ ์์ ๋ด ์๊ฐ์ ์ ๊ณตํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ๋ง์ ์์ ์ด์ง๋ง ์ฅ๊ธฐ์ ์ผ๋ก ๋ณผ ๋ ๊ทธ๋งํ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฐฉ๋ํ ํ ์คํธ์์ ์ฉ์ํ์ธ์!
@Vultraz ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค.
์ ๋ C++์ ๋ํ (๊ฑฐ์) ๊ฒฝํ์ด ์์ง๋ง GDNative + C++๋ก ์์ ํ ํ ๊ทํ์ ๊ฒฌํด๋ฅผ ๊ณต์ ํฉ๋๋ค.
๋ถ๊ณผ ๋ฉฐ์น ์ ์ ๋ ๋ ๋ง์ " Godot์ ๊ธฐ์ฌํ๋ ๊ฒ์ด C++๋ฅผ ๋ฐฐ์ฐ๋ ์ข์ ๋ฐฉ๋ฒ์ธ๊ฐ์? " ์ค๋ ๋์ ๊ฒ์ํ์ต๋๋ค:
๋๋ ๊ทธ๊ฒ์ ์ถ์ฒํ์ง ์์ ๊ฒ์ ๋๋ค. GDNative ๋ฐ C++ ์์ ์ ๋ํ ๋ด ๊ฒฝํ์ ๋ฐ๋ฅด๋ฉด ํ ์ ์ต์ํ ์ฌ๋ฌ ๋ฒ ์ฌ์ฐฝ์กฐํฉ๋๋ค(์ฌ์ฉ์ ์ง์ ์ปฌ๋ ์ ๋ฐ ํฌ์ธํฐ). ์ด๋ฌํ ์ฌ์ฉ์ ์ ์ ํด๋์ค๋ ๋ฌธ์ํ๋์ง ์์์ต๋๋ค(์ต์ํ GDNative C++ ๋ฐ์ธ๋ฉ/ํค๋ POV์์ - ๋ด๊ฐ ๋ง์ง๋ง์ผ๋ก ์๋ํ์ ๋ ์ปดํ์ผ๋์ง ์์ ๋ฐ๋ชจ ํ๋ก์ ํธ๋ก ์ด์ด์ง๋ ํ๋์ ๊ฐ์ด๋๋ฅผ ์ ์ธํ๊ณ ์ฝ๋ [ํค๋, ๋ฐ์ธ๋ฉ] ๋๋ ๊ณต์ ๋ฌธ์์๋ ๋ฌธ์๊ฐ ์์) ๋ฐ ํผ๋์ค๋ฝ๊ฑฐ๋ ์ง๊ด์ ์ด์ง ์์ ๋์์ด ์์ต๋๋ค(์: Ref๊ฐ ์ง๊ด์ ์ผ๋ก ํฌ๋ช ํด์ผ ํ๋ฏ๋ก ๋ํ๋๋ ํด๋์ค์ ๋์์ ๋ณ๊ฒฝํด์๋ ์ ๋์ง๋ง Ref์์ ์ผ๋ถ ์์ง ํด๋์ค๋ฅผ ๋ฆ๊ฒ ๋ํํ๋ฉด ์์ ์ถฉ๋์ด ๋ฐ์ํจ).
๋๋ ๋ํ ์๋ก์ด C++ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋์ IMO ๊ฐ๋ ์ฑ์ด ๋ฎ์ ์์ฉ๊ตฌ๋ฅผ ์ ํธํ๋ ํฌ์ด ์๋๋๋ค. ์ ๋ Haskell(๋ฐ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ), ๊ฐ๊ฒฐํจ, ๊ณ ๊ธ ์ฌ์ฉ์๋ฅผ ์ํ ์ธ์ด ์ฅ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ด๋ณด์์๊ฒ ์ฐ์ฐํ์ง ์๋ ๊ฒ์ ์ข์ํฉ๋๋ค.
์ด๋ฌํ ๊ฒฐ์ /๊ฐ์น ๋๋ฌธ์ ๋ด๊ฐ ์์ง์ ๊ธฐ์ฌํ ์ ์์์ง ์์ฌ์ค๋ฝ์ต๋๋ค. (์์ง ๊ฐ๋ฐ์๊ฐ ์ด๋ฌํ ๊ฒฐ์ ์ ๋ฐฐ๊ฒฝ์ด ๊ธฐ์ฌ๋ฅผ ์ฅ๋ คํ๊ธฐ ์ํ ๊ฒ์ด๋ผ๊ณ ๋ฐํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฏธ์์ต๋๋ค. ์ ๊ฒฝ์ฐ์๋ ์์ ํ ๋ฐ๋์ ํจ๊ณผ๊ฐ ์์์ต๋๋ค.)
@Vultraz ์ ์ ๋ฆฌ๋ ๊ธ, ์ ์ฝ์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค. ๊ทธ๋ฐ ๊ด์ ์ ๋ฃ๋ ๊ฒ์ด ์ข๋ค.
์ ๋ ๊ตฌ์ C++ ํ๋ก๊ทธ๋๋จธ์ด๊ณ Godot ์์ค ์ฝ๋๋ฅผ ์ดํดํ๋ ๋ฐ ํฐ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ์ ๊ตฌ์ฑ๋์ด ์๊ณ ์ ์ทจํฅ์ ๋ง์ด ๋ค์ด๋ง์ต๋๋ค. ์ฝ๋ ๊ธฐ๋ฐ์ ๋ํ ๊ธฐ์กด ๊ฒฝํ์ด ๊ฑฐ์ ์์ด ๋น๊ต์ ๋น ๋ฅด๊ฒ ์ด ์์ง์ ํต์ฌ์ VR ์ง์์ ์ถ๊ฐํ ์ ์์๋ ๊ฒ์ ์ด ์์ง์ด ์ผ๋ง๋ ์ฝ๊ธฐ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฌ์ด์ง์ ๋ํ ์ฆ๊ฑฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ค ๋ฉด์์๋ ๊ตฌ์์ผ ์๋ ์์ง๋ง ํน์ ๋ถํ์ด ์ผ๋ง๋ ์ ๋ง๋ค์ด์ก๋์ง์ ๊ณ์ํด์ ๋๋์ต๋๋ค. ์, ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ ์ค์ด๊ณ ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด ํ๋ํ๊ฐ ํ์ํ ๋ถ๋ถ์ด ์์ง๋ง ์ ์ฒด์ ์ผ๋ก๋ ๊ทธ๊ฒ์ ๊น์ ์ธ์์ ๋ฐ์์ต๋๋ค.
์ฌ๋๋ค์ด C++์ ์๋ก์ด ๊ตฌ๋ฌธ์ ๋ํด ์ด์ผ๊ธฐํ๋ ๊ฒ์ ๋ค์ ๋ ์ข ์ข ๋๋ ๊ทธ์ ๋ก์๋ค๋ ๋๋์ ๋ฐ๊ณ ์๋์ด ๋ฌด์์ธ์ง ์ ๋ง ๊ถ๊ธํฉ๋๋ค. ํ์ง๋ง ์ข ๋ ํ๋์ ์ธ C++๋ฅผ ๋ฐฐ์ฐ๊ณ Godot์ ๊ธฐ์ฌํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ฉด ๋ฐํด๋ฅผ ๋ค์ ๋ฐ๋ช ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฒ์ด ์ด์ํ๋ค๋ ๊ฒ์ ์ดํดํฉ๋๋ค. ํ์ง๋ง ์ ์ด๋ ๋์ ๊ฐ์ ์ฌ๋๋ค์๊ฒ๋ ์ด๋ฌํ ํด๋์ค๊ฐ ๊ตฌํ๋๋ ๊ฒ์ ๋ณด๋ ๋ฐ ๋๋ฌด ์ต์ํด์ ๋๋ถ๋ถ์ด ์ฌ๊ธฐ์์ ๊ตฌํ๋ ๋ฐฉ์์ ๊น์ ์ธ์์ ๋ฐ์์ต๋๋ค. :)
๋ชจ๋ ๊ฒ์ด ๋งํ๋ฏ์ด ์ด ๋ฌธ์ ๋ฅผ ๋ณด๋ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์์ด ์ฌ๋ฏธ๊ฐ ์์ต๋๋ค. ์๋ก์ด C++ ๊ตฌ๋ฌธ๋ณด๋ค ์์ Godot์ ๊ธฐ์์์ ํต์ฌ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฅ ํธ์ํ๊ฒ ๋๋ผ๋ ๊ฒ, Godot์ ํฌ๋ก์ค ํ๋ซํผ ํน์ฑ๊ณผ ์คํํ ์ ์๋ ์ฅ์น(์ผ๋ถ๋ ๊ณต๊ฐ๋์ง ์์)์ ์ํด ๋ถ๊ณผ๋ ์ ํ์ ์ด๋ฅด๊ธฐ๊น์ง. ๋๋ ์ด๊ฒ์ ์ณ๊ณ ๊ทธ๋ฆ์ด ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋น์ ์ด ์ต์ํ๊ณ ์ด๋์์ ์๋์ง, ๊ทธ๋ฆฌ๊ณ Godot๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ฐฐ์ฐ๋ ์ถ๊ฐ ํ์ต ๊ณก์ ์ด ํฐ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๋ ์ด์ ๋ณด๋ค ๋ ์ค์ํ์ง์ ๋ํ ์ง๋ฌธ์ ๋๋ค ๋ฒ ์ด์ค.
๋ณด์
จ๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง Juan์ GDC์์ ์จ๋ผ์ธ์ ๊ฒ์๋ ๊ฐ์ฐ์ ํ์ต๋๋ค: https://www.youtube.com/watch?v=C0szslgA8VY
๋ง์ง๋ง์ ์๋ Q&A์์ ๊ทธ๋ ์ด์ ๋ํ ์์ฌ ๊ฒฐ์ ์ ๋ํด ์ฝ๊ฐ ์ด์ผ๊ธฐํฉ๋๋ค.
์ข์ ์๊ณ์
๋๋ค.
์ผ๋ฐ ์ฌ์ฉ์์ธ GDNative์ ๋ํ ์์ ๋ฐ์๊ณผ ๊ด๋ จํ์ฌ GDNative๋ ํน์ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๋ ์ต๊ทผ์ ์ถ๊ฐ๋ ๊ฒ์ผ๋ก ํต์ฌ ์ ํ์ด ์ด๋ป๊ฒ ๊ตฌ์ฑ๋๊ณ ๊ตฌ์ถ๋๋์ง๋ฅผ ๋ํ๋ด์ง ์์ต๋๋ค.
๋ชจ๋์ ๋น๋ํด ๋ณด์ธ์(https://docs.godotengine.org/en/3.1/development/cpp/custom_modules_in_cpp.html). ์, GDNative๊ฐ ํด๊ฒฐํ๋ ค๊ณ ์๋ํ๋ ๋ฌธ์ ์ธ ํต์ฌ ์ ํ์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ์ปดํ์ผํด์ผ ํฉ๋๋ค. ์์ง์ด ์ค์ ๋ก ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด ์๋์ง ํจ์ฌ ๋ ์ ์ดํดํ ์ ์์ต๋๋ค. ์์์ ํฌ๊ธฐํ ๋ง์ ์ฃผ์ฅ์ Godot ์์ฒด๊ฐ ์๋๋ผ GDNative์ ๋จ์ ์
๋๋ค.
์ ๋ ์ ์ ๋ชจ๋์ ๊ตฌ์ถํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ชจ๋์ ๊ตฌ์ถํ ์ ์๋ ๋์ ๋ชจ๋ ์๋ฃจ์
์ ์ํฉ๋๋ค. ์ธ์ ๊ฐ๋ ๊ฐ๋ฅํ ์๋ ์์ง๋ง ๊ทธ๋๊น์ง๋ GDNative๋ก ์ถฉ๋ถํฉ๋๋ค.
@Vultraz @mnn ์ค์ ๋ก STL ์ปจํ ์ด๋์ ๋ํ ์์ ์ ์ ์ ์์ง๋ง ์์ ํ ์ผ๋ถ ๊ตฌํ(๋๋ถ๋ถ MSVC)์ด ๋๋ฒ๊ทธ ๋ชจ๋์์ ๋์ฐ ํ๊ฒ ๋๋ฆฐ ์ฑ๋ฅ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋จ์ํ EA์ STL์ ์ฌ์ฉํ๋ฉด ์ข์ ์ ์์ต๋๋ค(๋น ๋ฅด๊ณ ํด๋ ๊ฐ๋ฅํจ).
๋ํ: ๊ฐ์ธ์ ์ผ๋ก RAII ๊ฐ ์๋ค๋ ๊ฒ์ด ๊ฐ์ฅ ๊ณ ํต์ค๋ฌ์ ์ต๋๋ค. RAII๊ฐ C++11์ ์๋ก์ด ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์ ์ฒด์์ ๋ถํ์ํ๊ฒ ์ํ๋๋ ์๋ ์ ๋ฆฌ์ ์์ ์ด์ํฉ๋๋ค.
์ผ๋ฐ ์ฌ์ฉ์์ธ GDNative์ ๋ํ ์์ ๋ฐ์๊ณผ ๊ด๋ จํ์ฌ GDNative๋ ํน์ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๋ ์ต๊ทผ์ ์ถ๊ฐ๋ ๊ฒ์ผ๋ก ํต์ฌ ์ ํ์ด ์ด๋ป๊ฒ ๊ตฌ์ฑ๋๊ณ ๊ตฌ์ถ๋๋์ง๋ฅผ ๋ํ๋ด์ง ์์ต๋๋ค.
๊ทธ๊ฒ์ ๋ฌผ๋ก ์ฌ์ค์ด์ง๋ง GDNative๋ "์คํฌ๋ฆฝํธ"๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์์ง ์์ฒด๋ณด๋ค ๋ ์ฌ์ฉ์ ์นํ์ ์ด์ด์๋ ์ ๋ฉ๋๋ค. ์์ง?
์ด๋ฌํ ๊ฒฐ์ /๊ฐ์น ๋๋ฌธ์ ๋ด๊ฐ ์์ง์ ๊ธฐ์ฌํ ์ ์์์ง ์์ฌ์ค๋ฝ์ต๋๋ค. (์์ง ๊ฐ๋ฐ์๊ฐ ์ด๋ฌํ ๊ฒฐ์ ์ ๋ฐฐ๊ฒฝ์ด ๊ธฐ์ฌ๋ฅผ ์ฅ๋ คํ๊ธฐ ์ํ ๊ฒ์ด๋ผ๊ณ ๋ฐํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฏธ์์ต๋๋ค. ์ ๊ฒฝ์ฐ์๋ ์์ ํ ๋ฐ๋์ ํจ๊ณผ๊ฐ ์์์ต๋๋ค.)
์ ๋ C++ ๋ฉ์ฒญํ ๋(C++์์ ์ผ์ฃผ์ผ์ 2์ผ ์ฝ 2๊ฐ์)์ด๋ฏ๋ก ์ด ๊ฒฐ์ ์ผ๋ก ์ด์ต์ ์ป๋ ๋์ ์ธ๊ตฌ ํต๊ณํ์ ๋์์ด ๋์ด์ผ ํฉ๋๋ค. ๋๋ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ด ๋ถ์กฑํ Godot ์ปจํ ์ด๋๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค(๋๋ฌด ํ๋ถํ์ง ์์ stl๊ณผ ๋น๊ตํ์ฌ). ์ปจํ ์ด๋๊ฐ GDNative์ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํ์ง ์์ง๋ง, ์ ๊ฐ ์ฐฉ๊ฐํ ์ ์์ต๋๋ค. ๋๋ Godot ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํญ์ ๊ณ ํต์ค๋ฝ๊ธฐ ๋๋ฌธ์ ์ต๋ํ ํผํ๊ณ ์์ต๋๋ค. Ref์ ์ผ๊ด๋์ง ์๊ณ ์์์น ๋ชปํ ํ๋์ ์์ง์ ์ฑ ์์ด๋ผ๊ณ ์๊ฐํ๋๋ฐ, ์ ์๊ฐ์ด ํ๋ ธ์ต๋๋ค.
๋ด ํ๋ก๊ทธ๋๋ฐ ๋ฐฐ๊ฒฝ์ด ์๋ง๋ ๋ค์ ์ด๋ก์ ์ด๋ผ๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. JS/TS์์ ์ ๋ฌธ์ ์ผ๋ก ์ผํ ๋ , Scala์์ 1๋ , Haskell์์ ๋ ์์ ์ทจ๋ฏธ ํ๋ก์ ํธ(์์ฒ ์ค, Haskell์ด ์ผ๋ง๋ ๊ฐ๊ฒฐํ์ง๋ฅผ ๊ณ ๋ คํ๋ฉด ์ค์ ๋ก ๊ทธ๋ ๊ฒ ์์ง๋ ์์ต๋๋ค) - ์ฌ๋ฌ ๋ฒ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. C++์์๋ Haskell์์ ์ต์ 5๋ฐฐ๋ ๋ ์งง๊ณ ์ฝ๊ธฐ ์ฝ์ต๋๋ค.) ๊ตฌ์์ ์ง๋์น๊ฒ ์ฅํฉํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋๋ดํ๋ ์ ์ผํ ์ฌ๋์ธ์ง ๊ถ๊ธํฉ๋๋ค.
@mnn , GDNative๋ C ๊ธฐ๋ฐ ๋ชจ๋์ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์์ฑํ ์ ์๋๋ก ๋ง๋ค์ด์ก์ผ๋ฏ๋ก ์ ์ฒด ์์ง์ ๋ค์ ์ปดํ์ผํ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ ์์ C++, python, rust ๋ฑ์ผ๋ก ์ ์ฒด ์์ง์ ์ปดํ์ผํ ํ์๊ฐ ์๋ ๋ชจ๋์ ์์ฑํ ์ ์๋๋ก ์ฌ๋ฌ ์ธ์ด ๋ฐ์ธ๋ฉ์ด ์์ฑ๋์์ต๋๋ค.
์ด๊ฒ์ ๋ ๋ค๋ฅธ ๋ชฉํ๋ ๊ฐ๋ฐ์๊ฐ ๋ชจ๋ ์์ฒด๋ฅผ ์ ๋ฌํ๊ณ ์์ ์ ์ธ ์์ง ๋น๋์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ๋ชจ๋์ ๋ง๋ค ์ ์๋๋ก ํ๋ ๊ฒ์ด์์ต๋๋ค. ๋ง์ ๋ชจ๋์ด ์์ง ์ ์ง ๊ด๋ฆฌ๋์ง ์์ ํน์ ๋ฒ์ ์ ์์ง์ ์ฐ๊ฒฐ๋์ด ์์ด์ก์ต๋๋ค.
์, ์ปดํ์ผ ๋ฐ ๋ฐฐํฌ ๊ด์ ์์ ๋ชจ๋์ ๋ง๋๋ ๊ฒ์ด ํจ์ฌ ์ฝ๊ณ ๊ฐ๋จํด์ก์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ๊ทผ ๋ฐฉ์ ๋๋ฌธ์ ํ๊ณ๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ์ ํ ์ฌํญ ๋ด์์ ์ ์งํ๋ฉด GDNative์์ C++ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๊ฐ๋จํ๊ฒ ์ ์ง๋ ์ ์์ต๋๋ค. ์๋ํ๋ฉด ๋ชจ๋์ ๋น๋ํ๋ ๋์์ด ๊ฐ๋จํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๋ฌํ ํ๊ณ์์ ๋ฒ์ด๋๋ ค๊ณ ๋
ธ๋ ฅํ๋ฉด ๊ณจ์น ์ํ ์ผ์ ์ง๋ฉดํ๊ฒ ๋ฉ๋๋ค. ๋ด ํ์ฌ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ OpenGL ๋ก์ง์ ๊ตฌํํ๋ ค๊ณ ํ๋ ๊ฒ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ์ด ๋ก์ง์ ๋ชจ๋ ๋น์ฃผ์ผ ์๋ฒ ์ํคํ
์ฒ ๋ด๋ถ์ ์บก์ํ๋์ด ์๊ณ ๋ด๊ฐ ์ํ๋ ๋ฐฉ์์ผ๋ก GDNative ๋ด๋ถ์์ ์ค์ ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ GDNative๋ก ๊ฒฐ์ฝ ์ค๊ณ๋์ง ์์ ์ผ์ ํ๊ณ ์ถ์ ์ด์ ์
๋๋ค.
์ค๊ณ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ฉด ์ ๋ง ๋ฉ์ง ์ผ์ ํ ์ ์์ต๋๋ค.
๋ํ GDNative๋ ๋ ๋์ ์ฑ๋ฅ์ด ํ์ํ GDScript ์ฝ๋๋ฅผ ์ฌ์์ฑํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด๋ผ๋ ์ ์ ์ ์ํ์ญ์์ค. ๊ฒฐ๊ณผ์ ์ผ๋ก GDScript๊ฐ ์ก์ธ์คํ ์ ์๋ ์์ง ๋ด๋ถ์ ์ด๋ค ๊ฒ๋ ์ก์ธ์คํ ์ ์์ต๋๋ค(์: OpenGL).
์ต์ ์ฝ๋ฃจํด ์ง์, ์ฆ co_await()๋ ์ด๋ป์ต๋๊น? procgen ๊ด์ ์์ ์ด๊ฒ์ ๊ฑฐ๋ํฉ๋๋ค.
์ฝ๋ฃจํด ์ง์์ ์์ง ํ์ ๋์ง ์์ C++20 ํ์ค์ ์ผ๋ถ์ ๋๋ค.
์ ๋ ํ์ฌ 3D Spatial Editor๋ฅผ ์ํ ๊ณ ๊ธ(์์ค ๋ง์น ํธ์ง๊ธฐ ์๊ฐ) ๋ธ๋ฌ์/csg ๋๊ตฌ๋ฅผ ์์ฑํ๊ณ ์๋๋ฐ ์๋์ ํ์ฉํ์ง ์๋๋ค๋ ์ด ์ด์ผ๊ธฐ๋ ์ ์๊ฒ ์ ๋ง ํผ๋์ค๋ฝ์ต๋๋ค. ๋๋ก๋ _auto๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์กฐ์ฐจ ๋ช ์์ ์ผ ์ ์์ต๋๋ค_. ๋ค์์ ๊ณ ๋ คํ์ธ์:
์ ๋ SpatialEditorViewportContainer ์์ ์๊ณ ์์ ๊ณ์ธต์ ์ธ ํญ๋ชฉ์ธ SpatialEditor๋ฅผ ์ป๊ณ ์ถ์ต๋๋ค(๋๊ตฐ๊ฐ๊ฐ ๋ทฐํฌํธ ์ปจํ ์ด๋์์ SpatialEditor์ ์ก์ธ์คํ๋ ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ์ง์ ํ๊ธฐ ์ ์ ์ด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ณด๊ธฐ ์์ํ๋ค๋ ์ ์ ๊ณ ๋ คํ์ญ์์ค. ์ด์ )
auto sp = Object::cast_to<SpatialEditor>(get_parent()->get_parent()->get_parent());
๋ณด์๋ค์ํผ ๋์ ๋ค์ด์บ์คํธ๋ _์ด๋ฏธ SP_ ์ ํ์ ๋ช ์์ ์ผ๋ก ๋ํ๋ ๋๋ค. auto๊ฐ ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ค๋ณต ์ ํฌ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
SpatialEditor sp = Object::cast_to<SpatialEditor>(get_parent()->get_parent()->get_parent());
์ ์ ์ฌ๋์ ์ํด ์คํ ์ฌ์ฉ์ ํ๋ฝํด์ฃผ์ธ์!
C++ ํ์ค์ ์ฌ์ฉํ ์ฃผ์ : C++20 ์ด์์์ ์ ์๋ ๋ฆฌํ๋ ์ ๋ฐ ๋ฉํ ํด๋์ค ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ ๋งคํฌ๋ก ํผ๋์ ์ค์ด๋ ๋ฐ ์ ๋ง ์ ์ฉํฉ๋๋ค.
GDCLASS(SpatialEditorViewportContainer, Container);
๋ํ ์ด๋ฌํ ์ ํ์ผ๋ก ์ธํด ๊ธฐ์ฌํ๊ธฐ๋ก ํ ๊ฒฐ์ ์ด ์ ๋ง ๋ ๋ฒ์งธ๋ก ์ถ์ธก๋๋ค๋ ์ ์ ๊ฐ์กฐํ๊ณ ์ถ์ต๋๋ค. 2012๋ ๊ฒฝ, ๋๋ ์ค์ค๋ก C++11์ ๋ฐฐ์ ๊ณ ์ด ํ์ค์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋บจ์ ๋๋ฆฌ๋ ๊ฒ๊ณผ ๊ฐ์์ต๋๋ค. C++11๊ณผ C++03์ ์์ ํ ๋ค๋ฅธ ์ธ์ด์ด๋ฉฐ C++๊ฐ ๋ฐฐ์ฐ๊ธฐ ์ด๋ ต๊ณ ์ฝ๊ธฐ ์ด๋ ต๊ณ ์ฐ๊ธฐ ์ด๋ ต๋ค๋ ํํ์ ๋๋ถ๋ถ์ C++03(๋๋ 98)์ ์๋ชป์ ๋๋ค. ์ต์ํ C++11 ๋๋ 14๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ์ ์ง๋ณด์ ๋ฐ ๊ฐ๋ ์ฑ์ _ํด๋ก์ด_ ๊ฒ์ ๋๋ค. ์ ๋ C++11๊ณผ ํจ๊ป ์๋๊ณ ํ๋ก์ ํธ ๋ฆฌ๋๋ ๋ถ๋ช ํ ๊ทธ๋ ์ง ์์์ต๋๋ค(๊ทธ๊ฐ 2007๋ ์ Godot์์ ์์ ํ๊ธฐ ์์ํ์ ๋ ์ ๋ 12์ด์ด์์ต๋๋ค). ๊ทธ๋์ ์ ๋ ์ด๊ฒ์ด ์ ํธ๋์ ์๊ธฐ ์ค๋ฆฌ ์ฆํ๊ตฐ์ ๊ฒฝ์ฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ C++11์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ํ๋ C++์ ๋ฐฐ์ฐ๋๋ฐ ์๊ฐ์ ๋ค์ธ ๋ ๊ฐ์ ์ฌ๋๋ค์ ํฌ์์ํค๋ฉด์ ๊ตฌ์(์ผ๋ช ๋์ฐํ) C++์ ์ต์ํ ์ฌ๋๋ค์ ์๋กํ๊ธฐ ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ ์ ๋ ๋ง์ ์ฃผ๋์ด ํ๋ก๊ทธ๋๋จธ๊ฐ ํ๋ C++ 11 ์ด์์์ ์ฑ์ฅํ๊ณ ํ๋ก์ ํธ๊ฐ ๋๋ค๊ฐ ์๋ ์ธ์ด์ ์์ํ ๊ฐํ ์๋ค๋ ์ฌ์ค์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
์์ปจ๋: C++11 ๋๋ ํ์!
๋ถ๋ช ํ ๋ง์๋๋ฆฌ์๋ฉด, ์ ๋ STL์ ์ฌ์ฉ์ ์นํธํ์ง ์์ต๋๋ค. ์์ ์ ์ปจํ ์ด๋๋ฅผ ๊ตด๋ฆฌ๋ ๊ฒ์ ๊ด์ฐฎ์ง๋ง ๋๋ค ๋ฐ ์๋๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ฑฐ๋ถํ๋ ๊ฒ์ ๋ฌด์๋ฏธํด ๋ณด์ ๋๋ค.
์ฌ๊ธฐ์ ๋ ๋ ผ์ํ๋ ๊ฒ์ ๋ฌด์๋ฏธํ๋ฏ๋ก ์ง๊ธ์ ๋ฐํฅ์ค์ ๋ซ๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ๋ช ๋ฌ ์ ์ C++11 ๋ฐ/๋๋ ์ผ๋ถ ์ดํ ๋ฒ์ ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๊ณํ์ ๋ํด ๋ ผ์ํ์ต๋๋ค.
์ฐ๋ฆฌ๋ @hpvb ๊ฐ ์ฐ๋ฆฌ์ ํฉ์์ ๋ฐ๋ผ ๊ทธ๊ฐ ์์ฑํ๊ณ ์๋ ์ง์นจ์ ๋ง๋ฌด๋ฆฌํ ์๊ฐ์ ๊ฐ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ผ๋ฉฐ, ๊ทธ๋ฐ ๋ค์ ๊ฒ์๋๋ฉด ํด๋น ์ง์นจ์ ๋ํด ๋ ๋ ผ์ํ ์ ์์ต๋๋ค. ๊ทธ๋๊น์ง๋ ์ด๊ฒ์ ๊ฑด์ค์ ์ด์ง ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
Godot์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ฒ์ ์ ํ๋ ์ฌ๋์ผ๋ก์ ์ 2์ผํธ(๋๋ 20์ผํธ)๋ฅผ ์ ๊ณตํ๊ณ ์ถ์ต๋๋ค. ์ ๋ ํ์ฌ _Battle for Wesnoth_๋ฅผ Godot๋ก ์ด์ํ๋ ์์ ์ ๊ฐ๋ ํ๊ณ ์์ ์ค์ ๋๋ค. ์ด์ ํ๋ก ํธ ์๋(์๋ํฐ์ GDScript API)๊ฐ ํ๋ฅญํฉ๋๋ค! ๋ช ๊ฐ์ง ๊ฑฐ์น ๋ถ๋ถ ์ธ์๋ ์ง๊ธ๊น์ง๋ ์ข์ ์๋๋ก ์งํํ ์ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ(ํ)๋ ์ธ์ ๊ฐ๋ ๋ฐฑ์๋(์์ง)์ ๋ํ ํจ์น๋ฅผ ์ ๊ณตํ ๊ฒ์ด๋ผ๊ณ ์์ํ์ต๋๋ค. ์ด๋ฅผ ์ํด ์ด๋ฒ ์ฃผ ์ด์ git repo๋ฅผ ๋ณต์ ํ๊ณ C++์์ ์ฌ๊ธฐ์ ๊ธฐ ํ๊ณ ๋ค๊ธฐ ์์ํ์ต๋๋ค. ์์งํ ๋งํด์... ์ ๋ ์ฝ๊ฐ ์ค๋งํ์ต๋๋ค.
์ ๋ Wesnoth์ ์ค๋๋ ์ฌ์ฉ์ ์ ์ ์์ง์ ํํ๋ก ๋๊ท๋ชจ C++ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ ๊ฒฝํ์ด ์์ต๋๋ค. ์ญ์ C++03์ผ๋ก ์์ํ์ง๋ง C++11 ์ด์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋๋ก ํ๋ํ๋์์ผ๋ฉฐ ์ด์ C++14์ ํธํ๋ฉ๋๋ค. ๋๋ ๊ทธ ํ๋ํ ๋ ธ๋ ฅ์ ์ฃผ๋ํ๊ณ (์ข ์ข ๋๋ฌด ์ด์ฑ์ ์ผ๋ก) ์ฐ๋ฆฌ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ํจ์ฌ ๋ ์ฝ๊ธฐ ์ฝ๊ณ ์์ ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฌผ๋ก ์ ๋ ์์ํ C++03 ์ฝ๋๋ฒ ์ด์ค๋ก ๊ด๋ฒ์ํ๊ฒ ์์ ํ ์ ์ด ์์ต๋๋ค. ์ต์ C++ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ C++๋ฅผ ๋ฐฐ์ ์ต๋๋ค. ํ์ง๋ง
auto
, range-for ๋ฐ lambdas์ ๊ฐ์ ๊ฒ๋ค์ด ์ฝ๋๋ฅผ ๋ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ ๋ค๋ ์๊ฐ์ ์ ๋ง... ๋งค์ฐ ์ด์ํฉ๋๋ค.auto
๋ฅผ ๋จ์ฉํ๊ณ ๋จ์ฉํ๋ ๊ฒ์ด ํ์คํ ๊ฐ๋ฅํ์ง๋ง ํฉ๋ฒ์ ์ธ ์ฉ๋๋ ๋ง์ด ์์ต๋๋ค. Wesnoth ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ ๋ฐ์ดํธํ ๋auto
๋ฅผ ๋ฐฐํฌํ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ฅ์ ์ค ํ๋๋ ๋ฐ๋ณต์๋ฅผ ์ฌ์ฉํ๋ for ๋ฃจํ์์ต๋๋ค. ์ด์ ์๋ ๋ค์๊ณผ ๊ฐ์ ํญ๋ชฉ์ด ์์์ต๋๋ค.์ด๋ ๊ฒ์ด ์ง์ ๋ถํด! ์ค์ ๋ก iterator๊ฐ ํ์ํ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด ํ์ต๋๋ค.
์, ์ด์ ๋ช ์์ ๋ฐ๋ณต๊ธฐ ์ ํ์ ๋ชจ๋ฅด์ง๋ง ๊ฑฐ์ ์ ํ์ ๊ฐ ์์ต๋๋ค. ๋๋ ์ปจํ ์ด๋๊ฐ ์ผ๋ถ ํ์ผ์ ์ ์ธํ๋ฉด ๋ ์ด๋ ค์์ง๋ค๋ ๊ฒ์๋ฌผ์ ์ฌ๊ธฐ์์ ์ฝ์์ง๋ง ์ค์ ๋ก ํ๋ ์ฝ๋ ํธ์ง๊ธฐ์ ์ธํ ๋ฆฌ์ผ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ๋ค์ง ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด range-for๋ก ์ ํํฉ๋๋ค.
ํ์ดํ๋ ํจ์ฌ ๋น ๋ฅด๊ณ ๊ฐ๊ฒฐํฉ๋๋ค. ๋ฃจํ ๋ด์์ ๋ฐ๋ณต์๋ฅผ ์ญ์ฐธ์กฐํ๊ฑฐ๋ ์ธ๋ฑ์ค๋ฅผ ์ถ์ ํ๋ ๊ฒ์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์ด ์ ์ฒด ์ปจํ ์ด๋๋ฅผ ๋ฐ๋ณตํ๊ณ ์๋ค๋ ๊ฒ์ด ๋งค์ฐ ๋ถ๋ช ํฉ๋๋ค. ๋ฐ๋ณต์๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ์ต์ํ์ง ์์ ์ฌ๋๋ค์ ๋ฃจํ๊ฐ ์ฒ์๋ถํฐ ๋๊น์ง ์ค์ ๋ก ์งํ๋๋์ง ๋ค์ ํ์ธํด์ผ ํฉ๋๋ค.
์ฌ๊ธฐ์์ range-for ๋ฃจํ์์
auto
๋ฅผ ์ฌ์ฉํ๋ฉด ์ถ๊ฐ ์ด์ ์ด ์์ต๋๋ค. ์ปจํ ์ด๋ ์ ํ์ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ ์ ๋ฐ์ดํธ๋ฅผ ๊ธฐ์ตํด์ผ ํ๋ ํญ๋ชฉ์ด ํ๋ ์ค์ด๋ญ๋๋ค! ๋๋ ์ด๋ฌํ ๊ฒ๋ค์ด ์ฝ๋๋ฅผ ๋ ์ฝ๊ฑฐ๋ ์ดํดํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ ๋ค๋ Juan์ ์ฃผ์ฅ์ ์ ๋ง๋ก ์ดํดํ ์ ์์ต๋๋ค. ์ ์๊ฒ๋ ์ ๋ฐ๋์ ๋๋ค.๊ทธ๋ Godot์ ์ํ ๋น๋์ค์์ ๋๋ค๋ ์ธ๊ธํ์ต๋๋ค. ๋ค์ ๋งํ์ง๋ง, ๊ทธ๊ฒ๋ค์ ๋จ์ฉํ๋ ๊ฒ์ ํ์คํ ๊ฐ๋ฅํ์ง๋ง ๋ํ ์์ฒญ๋๊ฒ ์ ์ฉํ ๋๊ตฌ์ด๊ธฐ๋ ํฉ๋๋ค! ๋ค์์ C++11์ ์ฌ์ฉํ๊ธฐ ์ ์ Wesnoth์ ์ฝ๋๋ฒ ์ด์ค์์ ๋ณธ ์ผ๋ฐ์ ์ธ ํจ๋ฌ๋ค์์ ๋๋ค.
๊ธธ๊ณ ์ง์ ๋ถํ ์ฝ๋ ํฝ์ฐฝ. ๋ค์์ C++11์์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์ ๋๋ค! ๊ทธ๋ฆฌ๊ณ ์, T์ ๋ํด
operator<
๋ฅผ ๊ตฌํํ ์๋ ์๊ณstd::sort
๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ์ ์์ ์ ๋ณด์ฌ์ค๋๋ค. ๋ค์ ๋งํ์ง๋ง, ์๋ง๋ ๊ทธ๊ฒ์ ๋จ์ง ํ๋์ ์ธ C++๋ก ๋ฐฐ์ฐ๊ณ ๊ฑฐ์ ๋ ์ ์ ์ผ๋ก ์์ ํ ๊ฒ์ผ ์ ์์ง๋ง, ์ ์ ํ ๊ฒฝ์ฐauto
, range-for ๋ฐ lambdas์ ๊ฐ์ ๋๊ตฌ๋ฅผ ๋ฌด์ํ๋ ๊ฒ์ ๋ฐ์ ํ๋๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.์ด๊ฒ์ ๋๋ฅผ ๋ค์ ์์ ์ผ๋ก ์ด๋๋๋ค. ๋๋ Godot๊ฐ ๋ด๋ถ์ ์ผ๋ก STL ์ ํ ๋์ ์ ์์ฒด ์ฌ์ฉ์ ์ ์ ์ ํ์ ๋ง์ด ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์์์ฐจ๋ ธ์ต๋๋ค.
auto
์ ๊ฐ์ ์ฝ๋ ๊ฐ๋ ์ฑ์ ๋ํ ์ฐ๋ ค๊ฐ ์๋ ๊ฒฝ์ฐ STL ์ ํ๋ณด๋ค ์ฌ์ฉ์ ์ ์ ์ฝ์ด ์ ํ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ๋์ ์ผ๋ก ์ํด์ ๋๋ค! ๋ฉฐ์น ์ ์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ฒ์ํ๋ค๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ๋ง์ด ๋ฐ๊ฒฌํ์ต๋๋ค.์ด๊ฒ์ ๋นํจ์จ์ ์ ๋๋ค.
push_back
(์ ์ด๋std::vector
์ธก๋ฉด์์) const ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ์ฐ์ฐ์๋ ๋ถํ์ํ ๋ณต์ฌ๋ณธ์ ์์ฑํฉ๋๋ค.emplace_back
๋ฅผ ์ฌ์ฉํ๋๋ก ํจ์น๋ฅผ ๋ง๋ค๊ณ ์ถ์์ง๋ง ... ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค๊ฐ ์ฌ์ฉ์ ์ ์ ์ปจํ ์ด๋ ์ ํ์ ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค ๐Wesnoth์ ์ค๊ณ์ ๋ํ ํฐ ๋ฌธ์ ์ค ํ๋์ด์ ์ ์์ง(์ด ๊ฒฝ์ฐ Godot)์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ ์ฃผ์ ์์ธ ์ค ํ๋๋ Wesnoth๊ฐ Not Invented Here ์ฆํ๊ตฐ์ ํฌ๊ฒ ๊ฒช์๋ค๋ ๊ฒ์ ๋๋ค. Boost์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋์ ๋ ๋๋ง ํ์ดํ๋ผ์ธ์ ์ฌ์ฉ์ ์ง์ ์ด์๊ณ UI ํดํท์ ์ฌ์ฉ์ ์ง์ ๋์์ผ๋ฉฐ ๋ฐ์ดํฐ/์คํฌ๋ฆฝํ ์ธ์ด๋ ์ฌ์ฉ์ ์ง์ ๋์์ต๋๋ค.... ์์ ์ ์ ์ ์์ต๋๋ค. Godot ํฌํธ์์ ์์ ์ ์์ํ๊ธฐ ์ ์ ํ๋์จ์ด ๊ฐ์ ๋ ๋๋ง์ ๊ตฌํํ๋ ค๊ณ ์๋ํ์ง๋ง ์คํจํ์ต๋๋ค(์ด ์์ ๊น์ง ์ฐ๋ฆฌ๋ CPU ๊ธฐ๋ฐ ํ๋ฉด/์คํ๋ผ์ดํธ ๋ ๋๋ง์ ์ฌ์ฉํ์ต๋๋ค. 2019๋ ์๋ X_X๋ฅผ ์๊ณ ์์ต๋๋ค). SDL์
Texture
API์๋ ์ ฐ์ด๋ ์ง์์ด ์์๊ณ ์ ฐ์ด๋ ์ง์์ด ํ์ํ์ต๋๋ค. ๊ฒฐ๊ตญ ๋๋ ๊ฐ๋ฅํ ํ ์์ฒด ๋ ๋๋ฌ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ํ๋ก์ ํธ์ ๋ถํ์ํ ์ ์ง ๊ด๋ฆฌ ๋ถ๋ด์ ์ค ๊ฒ์ด๋ผ๊ณ ๊ฒฐ์ ํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ํต์ฌ ๊ฐ๋ฐ์๊ฐ ๊ฑฐ์ ์์๊ณ , Godot์ ๊ฐ์ ์์ง์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์ ์๋ ์๋ฒฝํ๊ฒ ํ๋ฅญํ๊ณ ์ ๊ด๋ฆฌ๋ ๋ ๋๋ฌ๊ฐ ์์ ๋ OpenGL(๋๋ OGL์ ์ญ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ Vulkan)์ ์์ฑํ ์ ์๋ ์ฌ๋์ ์ฐพ๋ ๊ฒ์ ๋ถํ์ํ ๊ณ ํต์ด์์ต๋๋ค. ๋์ ์.์ฌ๋ด์์ ๋ชจ๋ ๊ฒ์ ๊ตฌํํ๋ ๊ฒ์ด ๋์ ์๊ฐ์ด ๋ ์ ์๋ ์ข์ ์๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ๋ฅผ ์ ๊ธฐํฉ๋๋ค. ์, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์์ผ๋ก์จ ๋ฐ์ด๋๋ฆฌ ํฌ๊ธฐ๋ฅผ ์ฝ๊ฐ ์ค์ผ ์๋ ์์ง๋ง ๋ง๋ํ ์ ์ง ๊ด๋ฆฌ ๋ถ๋ด์ ์ง๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ
push_back
ํธ์ถ์emplace_back
๋ก ๋ณํํ๋ ๊ฒ์ ์ฝ๋๋ฅผ ๋ ๊นจ๋ํ๊ณ ์ฑ๋ฅ์ด ์ข๊ฒ ๋ง๋ค ์ ์๋ ๋งค์ฐ ๋ฎ์ ๊ฒฐ๊ณผ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉ์ ์ ์vector
์ ํ์ด ์๊ธฐ ๋๋ฌธ์ ๋ด๋ถ ๊ตฌ์ฑ์ ์ํ๋ ๊ฒฝ์ฐ ๋๊ตฐ๊ฐ ์๋์ผ๋ก ๊ตฌํํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ชจ๋ ์ฌ์ฉ์ ์ ์ ์ ํ์์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค!๋ ํฐ ๋ฌธ์ ๋ ์ง์ ์ฅ๋ฒฝ์ด ๋์์ง๋ค๋ ์ ์ด๋ค. C++ STL ์ ํ์ ๊ธฐ๋ํ๋ Godot ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ดํด๋ณด์์ต๋๋ค. ์ด๋ฅผ ์ฐพ์ง ๋ชปํ๋ค๋ ๊ฒ์ ๋ ๋๋ ๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ ์ด์ ์์ง์ด ์ ๊ณตํ๋ ์ ํ๊ณผ ๊ฐ API์ ํจ๊ป ์ ๊ณต๋๋ ์ ํ์ ์ ํํ ์์์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ด๊ฐ ์ํ๋
std::map
? ์๋์,dictionary
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ทธ๊ฒ์ ๋จ์ง ๋ฉ์ธํ ์ด๋์ ์ถ์ ํ๋ค๊ฒ ๋ง๋ค๊ณ ์๋ก์ด ๊ธฐ์ฌ์๋ค์ ์ผ์ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก, ํ ๊ฐ์ง์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ ๋ก๋ ๋ค๋ฅธ ์ฝ๋๊ฐ... ์ฝ์ ์ ์๋ ์ฝ๋๊ฐ ์๋๋๊น?์ฝ 1๋ ์ Wesnoth์ 1.14 ๋ฆด๋ฆฌ์ค ๋ฐ Steam ์ถ์๋ฅผ ๋ง๊ฐํ๋ฉด์ ์ ๋
erase()
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ์ธํ๊ณ ๊ธฐ๋ณธ์ ์ผ๋กstd::list
์ธ ์ฌ์ฉ์ ์ ์ ์ปจํ ์ด๋ ์ ํ์ ์ ๊ฑฐํ๊ธฐ ์ํ ๋ฆฌํฉํ ๋ง ํ๋ก์ ํธ์ ์ฐฉ์ํ์ต๋๋ค. ๋ฐ๋ณต์. ๋ค์์ ๋ฌธ์ ์ ์ปค๋ฐ ์์น ์ ๋๋ค. ์ ๋๋ก ํ๋ ค๋ฉด ๊ทธ ํ์ ์ถ๊ฐ ์์ ์ด ํ์ํ์ง๋ง ๊ฒฐ๊ณผ๋ ํจ์ฌ ๋ ๊ฐ๋จํ๊ณ ์ดํดํ๊ธฐ ์ฌ์ฐ๋ฉฐ ๋ ๋ถํฌ๋ช ํ ์ฝ๋์์ต๋๋ค.๊ฒฐ๋ก ์ ์ผ๋ก, ๋งค์ฐ ์ ์ฉํ C++11 ๊ธฐ๋ฅ์ ๋ถ๋ฒํํ๊ณ STL ์ ํ๋ณด๋ค ์ฌ์ฉ์ ์ ์ ์ ํ์ ๊ณ ์ํ๋ ๊ฒ์ ์ฅ๊ธฐ์ ์ผ๋ก Godot์ ๋ฐฉํด๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ฆฌํฉํ ๋งํ๋ ๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง(์ ๋ฅผ ๋ฏฟ์ผ์ธ์, ์ ๋ ์๋๋ค), ํ์ฌ ์ํฉ์์๋ ๊ฒฐ๊ตญ catch-22๋ก ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. STL(๋ผ๊ฑฐ ๋ฐ์ด๋๋ฆฌ ํฌ๊ธฐ ๋ฑ) ์ฌ์ฉ์ ๋จ์ ์ ํผํ๋ ค๊ณ ํ๋ฉด ์๋ก์ด C++ ํ์ค์์ ๋ ๋์ ์ฑ๋ฅ๊ณผ ๊น๋ํ โโ์ฝ๋๋ก ์ ํํ๋ ๊ฒ์ด ์ ์ ๋ ์ด๋ ค์์ง ๊ฒ์ ๋๋ค. ๋ชจ๋ ์ฌ์ฉ์ ์ ์ ์ ํ์์ ๋ด๋ถ ๊ตฌ์ฑ์ ๊ตฌํํ๋ ๊ฒ์ ํน๋ณํ ๊ธฐ๋ํ๋ ์ฌ๋์ ์๋ฌด๋ ์์ ๊ฒ์ ๋๋ค. ๐ฌ
์ฌ๊ธฐ์์ ๋ด ์๊ฒฌ์ด ํฐ ์๋ฏธ๊ฐ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง C++03์์ ์ต์ C++๋ก ์ด๋ํ ๋๊ท๋ชจ C++ ์ฝ๋๋ฒ ์ด์ค๋ก ์์ ํ ์ฌ๋์ ๊ด์ ์์ ๋ด ์๊ฐ์ ์ ๊ณตํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ๋ง์ ์์ ์ด์ง๋ง ์ฅ๊ธฐ์ ์ผ๋ก ๋ณผ ๋ ๊ทธ๋งํ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฐฉ๋ํ ํ ์คํธ์์ ์ฉ์ํ์ธ์!