{
C++ 에서도 가변 인자가 필요한 경우가 있긴 있다. 하지만 C++ 높은 수준의 구조체나 boost 라이브러리 등을 이용하면 굳이 사용하지 않아도 된다.

그렇다면 왜 사용하지 말아야 하는가?
그 이유는 타입 안전성에 약하다. 일단 가변 인자는 타입 안전성 검사를 모두 중단하는 것이다. 그리고 프로그래머가 그 가변 인자를 관리해 주어야 한다. 역시 귀찮은 작업이다. 그리고 클래스 타입의 개체에 대한 결과는 예상하기 힘들다. .. 가변인자를 클래스의 개체를 넣는다면 .. 정말 그 결과를 예상하기 힘들다. 마지막으로 인자의 갯수를 아는 방법이 없다.

하지만 sprintf 등의 함수류에서 무척 간편하게 사용하기도 하고, 로그를 남길 때라든지 무척 편하다는 장점이 있다.

자, 선택은 자신의 몫! 아 그리고 boost::format 라이브러리를 사용하면 좀 편해진다. : ) 물론 가변인자가 편해지는게 아니라, 가변인자를 빈번히 사용하는 sprintf 류를 boost::format 으로 대체할 수 있다는 것이다.

아래 샘플 코드를 보면 쉽게 이해가 갈 것이다. 이 코드는 boost에서 가져 왔다.

}

'책 정리 > C++ Coding Standards : C++ 코딩의 정석' 카테고리의 다른 글

항목 70 : 어디까지가 오류인지 명확히 해두자. ( Distinguish between errors and non-errors. )  (0) 2009.04.28
항목 69 : 합리적인 오류 처리 방식을 수립하고, 엄격히 그 방식을 따르라. ( Establish a rational error handling policy, and follow it strictly. )  (0) 2009.04.17
항목 68 : 내부적인 가정과 규칙을 확실하게 명시하라. ( Assert liberally to document internal assumptions and invariants. )  (0) 2009.04.17
항목 100 : 배열을 다형적으로 다루어서는 안된다. ( Don’t treat arrays polymorphically. )  (0) 2009.04.17
항목 99 : 올바르지 않은 개체와 안전하지 않은 함수는 사용하지 말라. ( Don’t use invalid objects. Don’t use unsafe functions. )  (0) 2009.04.17
항목 98 : 가변 인자의 사용을 피하라. ( Don’t use varargs (ellipsis). )  (0) 2009.04.17
항목 97 : union 사용을 주의하라. ( Don’t use unions to reinterpret representation. )  (0) 2009.04.17
항목 96 : POD가 아닌 데이터를 memcpy 또는 memcmp하지 말라. ( Don’t memcpy or memcmp non-PODs. )  (0) 2009.04.17
항목 95 : C 스타일의 캐스팅은 사용하지 말라. ( Don’t use C-style casts. )  (0) 2009.04.16
항목 94 : const 는 캐스팅 하지 말자. ( Avoid casting away const. )  (0) 2009.04.16
항목 93 : 포인터에 대한 static_cast 사용은 피하라. ( Avoid using static_cast on pointers. )  (0) 2009.04.16
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요