Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ is_void 템플릿 완벽 정리: void 타입 검사 방법과 예제

이 글에서는 C++ STL의 std::is_void 템플릿이 어떻게 동작하는지, 그리고 문법과 실제 활용 예제를 자세히 살펴보겠습니다.

is_void<type_traits> 헤더 파일에 정의된 템플릿으로, 주어진 타입 T가 void 타입인지 여부를 컴파일 시점에 판별하는 데 사용됩니다.

C++에서 void 타입이란?

간단히 말해 void는 '비어 있음', 즉 '아무것도 없음'을 의미합니다. 함수를 void로 선언하면 해당 함수가 아무 값도 반환하지 않는다는 것을 나타냅니다.

또한 void 포인터(void pointer)도 선언할 수 있습니다. void 포인터는 가리키는 대상의 타입이 지정되지 않은 포인터입니다. 단, 역참조하기 전에는 반드시 다른 구체적인 타입의 변수로 형변환하여 참조해야 합니다. void 포인터는 타입에 관계없이 어떤 객체든 가리킬 수 있기 때문에 프로그래머에게 매우 유용한 도구입니다.

문법

template <class T> is_void;

매개변수

이 템플릿은 타입 T 하나만을 매개변수로 받으며, 해당 타입 T가 void 타입인지 검사합니다.

반환 값

불리언(Boolean) 값을 반환합니다. 주어진 타입이 void 타입이면 true, 그렇지 않으면 false를 반환합니다.

예제 1

Input: is_void<void>::value;
Output: True

Input: is_void<int>::value;
Output: False

예제 2

#include <iostream>
#include <type_traits>
using namespace std;
int main() {
    cout << boolalpha;
    cout << "checking for is_void:";
    cout << "\nvoid:" << is_void<void>::value;
    cout << "\nconst void:" << is_void<const void>::value;
    cout << "\nint:" << is_void<int>::value;
    cout << "\nchar:" << is_void<char>::value;
    return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

checking for is_void:
void: true
const void: true
int: false
char: false

위 결과에서 알 수 있듯이 voidconst void는 모두 true로 판별됩니다. 즉, cv 한정자(const, volatile)가 붙어도 근본 타입이 void라면 true를 반환합니다.

예제 3

#include <iostream>
#include <type_traits>
using namespace std;
int main() {
    cout << boolalpha;
    cout << "checking for is_void:";
    cout << "\nDouble:" << is_void<double>::value;
    cout << "\nFloat:" << is_void<float>::value;
    cout << "\nvolatile void:" << is_void<volatile void>::value;
    cout << "\nconst volatile void:" << is_void<const volatile void>::value;
    return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

checking for is_void:
double: false
float: false
volatile void: true
const volatile void: true

마무리

std::is_void는 템플릿 메타프로그래밍에서 특정 타입이 void인지 조건부로 처리해야 할 때 유용하게 활용됩니다. ::value 멤버를 통해 불리언 결과를 얻을 수 있으며, C++17부터는 is_void_v<T> 변수 템플릿을 사용해 더욱 간결하게 작성할 수도 있습니다.