[C++] C++11 Parameter Pack 사용하기
글 작성자: Sowhat_93
C++11 부터 Parameter Pack 을 사용할 수 있다.
아래의 간단한 예시를 보도록 하자.
//Argument가 1개 일때.
template<class T>
void ParamPackFunction(const T& Last)
{
std::cout << typeid(Last).name() << " Type " << Last << std::endl;
}
//Argument가 2개이상.
//가장 앞의 Argument가 First에 들어오고, 나머지는 Next
template<class T, class ...NextParams>
void ParamPackFunction(const T& First, const NextParams&... Next)
{
std::cout << typeid(First).name() << " Type " << First << std::endl;
return ParamPackFunction(Next...);
}
int main()
{
ParamPackFunction(1, 2.1, "Hello", "World!", 5);
//1 2.1 "Hello" "World!" 5
return 0;
}
va_list 는 어드레스로 구해온다.
따라서 타입까지는 알 수가 없다.
Parameter Pack 을 이용하면 타입이 알아서 Argument로 굴러 들어온다.
따라서 타입에 맞게 오버로딩된 함수를 호출할 수 있다는 이야기이다.
위의 예시에서도 그런 예시이다.
cout 의 << operator는 많은 오버로딩 을 가지고 있고,
출력할때에 별 생각 없이 넣어도 알아서 잘 출력해준다.
많은 상황에서 유용하게 사용될 수 있을 듯 하다.
나의 경우에는 ODBC 쿼리 사용시 bind param , bind col 에 이용했다.
//Query.RegisterParamForQuery(TINYINTPARAM1)
//Query.RegisterParamForQuery(TINYINTPARAM2)
//Query.RegisterParamForQuery(NVARCHARPARAM1)
Query.BindParamsForQuery(TINYINTPARAM1, TINYINTPARAM2, NVARCHARPARAM1);
SQLRETURN RET = Query.ExcuteQuery(L"EXEC sp_ParamPackExample ?,?,?", Error);
//Query.RegisterResColBuffer(BIGINT);
//Query.RegisterResColBuffer(NVARCHAR1);
//Query.RegisterResColBuffer(NVARCHAR2);
//Query.RegisterResColBuffer(NVARCHAR3);
//Parameter Pack을 사용해 코드가 조금 더 깔끔해 졌다.
//재귀적으로 타입에 맞게 오버로딩된 RegisterParamForQuery 함수를 호출한다.
Query.BindResCols(BIGINT, NVARCHAR1 , NVARCHAR2, NVARCHAR3);
'C++' 카테고리의 다른 글
[C++] Type Casting 연산자 정리 static, dynamic,reinterpret, const (0) | 2022.03.17 |
---|---|
[C++] C++ 11 Argument로 전달된 정적 배열의 크기 (0) | 2022.03.05 |
[C++] C++ new 연산자 오버로딩을 이용한 메모리 풀 만들기 (0) | 2022.01.27 |
[C++] C++ 생성자 강제 호출 및 new 연산자 (0) | 2022.01.27 |
[C++] 정적라이브러리 vs 동적라이브러리 (0) | 2021.03.06 |
댓글
이 글 공유하기
다른 글
-
[C++] Type Casting 연산자 정리 static, dynamic,reinterpret, const
[C++] Type Casting 연산자 정리 static, dynamic,reinterpret, const
2022.03.17 -
[C++] C++ 11 Argument로 전달된 정적 배열의 크기
[C++] C++ 11 Argument로 전달된 정적 배열의 크기
2022.03.05 -
[C++] C++ new 연산자 오버로딩을 이용한 메모리 풀 만들기
[C++] C++ new 연산자 오버로딩을 이용한 메모리 풀 만들기
2022.01.27 -
[C++] C++ 생성자 강제 호출 및 new 연산자
[C++] C++ 생성자 강제 호출 및 new 연산자
2022.01.27