-
Notifications
You must be signed in to change notification settings - Fork 2
2014 11 06 static assert
krikit edited this page Nov 26, 2014
·
1 revision
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 클래스)으로부터 상속 받은 하위 타입만을 받아들여서 그 타입에서 정의하는 가상 메소드를 호출하는 식의 구현이 가능할 것이며, 타입이 맞지 않는 경우 컴파일 타임에 적절한 에러를 표시하게 될 것입니다.