본문 바로가기

Zig

tag union으로 타입마다 함수 호출하기

pub const SCENE = union(enum) {
    TITLE: title,
    SELECT_GAME_MODE: select_game_mode,
};
pub var scene = SCENE.TITLE;

const tags = comptime std.meta.tags(SCENE);
inline for (tags.*) |t| {//모든 씬마다 업데이트 호출
    std.meta.TagPayload(SCENE, t).update();
}
//title.update();
//select_game_mode.update();

위 코드와 같이 장면들의 각 타입을 기입해서 union을 만들어서 tags 함수로 해당 union 모든 태그를 가져온후 루프를 돌려서 그 태그의 해당하는 타입을 TagPayload로 가져와서 update를 각각 호출할 수 있습니다.

 

union의 태그 구성 갯수는 바뀔수 없으므로 comptime과 inline for을 씁니다. 

'Zig' 카테고리의 다른 글

zig에서 C 문자열 다루기  (0) 2024.10.10
임의의 크기 행렬 구현  (0) 2024.07.17