#naming supersubclass, is_base_of - 방향이 중요할 때, 명확한 이름

less than 1 minute read

#define SUPERSUBCLASS_STRICT(T, U)              \
    (SUPERSUBCLASS(T, U) &&                     \
     !Conversion<const T, const U*>::sameType)

INHERITS(T, U)와 같은 표현은 어떤 방향으로 검사가 이루어질지에 대한 지속적인 의문을 낳습니다. T가 U를 상속한다는 뜻일까요? 아니면 그 반대를 의미할까요? 결론적으로 말해서, SUPERSUBCLASS(T, U)는 어떤 것이 첫 번째이고, 어떤 것이 두 번째인지를 명확하게 나타내 주는 이름이라는 점이 가장 큰 이유입니다.

modern c++ design p86

맞다. 명확하다. 헷갈릴 일 없겠다. 이런 네이밍 팁은 언제든 환영이다.

template <class Base, class Derived> struct is_base_of;

c++11에 들어간 type traits 라이브러리에는 이름을 어떻게 지었을까? supersub는 아닐 거 같았다.

명확하다. 읽는 게 문장이라 더 자연스럽다. 전치사(preposition)로 이름을 끝낸 게 포인트다. BASE is base of DERIVED로 읽을 수 있으니깐. 전치사로 끝내니깐 파라미터(parameter)를 넣어서 읽게 된다. 위에 예를 든 INHERITS도 IS_INHERITED_FROM으로 짓는다면 순서에 대해 고민할 필요가 없지 않았을까?

둘 다 좋다. 명확하다. 영어를 잘하고 싶단 욕망이 담겨 마음이 더 가는 쪽은 is_base_of.