[C] C11 함수 오버로딩. 제너릭 셀렉션
C11에 와서야 함수 오버로딩을 쓸수가 있게 됐다.
이건 기본적으로 매크로 함수를 응용하는 방식으로 구현된다.
_Generic라는 매크로를 통해 타입을 식별하고 해당 타입에 맞는 표현식으로 전처리기에서 대체하도록 하는 것이다.
일단 첫번째 인자에는 타입을 매핑할 값을 명시한다.
두번째 인자에는
매핑할-타입: 표현식,
매핑할-타입2: 표현식2,
...
default: 표현식99)
같은 식으로 쓰면 된다. 가변인자다.
만약 문자열과 정수의 출력함수를 println이란 이름 하나로 오버로딩시킨다면 아래와 같이 짤 수 있다.
println라는 매크로함수를 정의하고 제네릭 셀렉션을 통해 타입을 매칭시키도록 하는 것이다.

잘 돌아가긴 한다.
하지만 각각의 타입 구현체들을 따로 정의하고 매크로로 묶어야 하는 등, 확실히 C++등의 언어에서 제공하는 진짜 오버로딩 등에 비하면 불편하고 조악한 편이다.
매크로 함수를 통해 구현되기에 oop 스타일과 혼용하기에도 힘들다.
그래도 어쩌겠나. 있는거라도 잘 써야지.