Skip to content

2014 11 06 static assert

krikit edited this page Nov 26, 2014 · 1 revision

static assert

assert는 원래 런타임에 수행되는 오류 검사 매크로입니다. C++11에서는 컴파일 타임에서도 가능하도록 static_assert가 추가되었습니다. 다음 코드를 보시죠.

#include <type_traits>

class Base1 {};
class Child1 : public Base1 {};
class Base2 {};
class Child2 : public Base2{};

template<typename T>
void foo(const T& t) {
  static_assert(std::is_base_of<Base1, T>::value, "T must be a child of Base1");
}

int main(int argc, char** argv) {
  foo(Base1());
  foo(Child1());
  foo(Base2());    // 컴파일 에러
  foo(Child2());    // 컴파일 에러

  return 0;
}

템플릿을 통해 타입을 인자로 받아들일 때 특정 타입(위에서는 Base1 클래스)으로부터 상속 받은 하위 타입만을 받아들여서 그 타입에서 정의하는 가상 메소드를 호출하는 식의 구현이 가능할 것이며, 타입이 맞지 않는 경우 컴파일 타임에 적절한 에러를 표시하게 될 것입니다.

Clone this wiki locally