티스토리 뷰
이번에 연습할 문제는 다양한 타입의 데이터 여러 개를 인자로 받아 공통 타입으로 변환하는 함수를 만들어 보는 예제이다.
이 함수가 반환하는 컨테이너는 모든 인자를 공통 타입으로 변환하여 저장하며, 전체 원소를 빠르게 순회할 수 있어야 한다.
#include <iostream>
#include <array>
#include <type_traits>
using namespace std;
template<typename ... Args>
auto build_array(Args&&... args) -> array<typename common_type<Args...>::type, sizeof...(args)> {
using commonType = typename common_type<Args...>::type;
return {forward<commonType>((Args&&)args)...};
};
int main() {
auto data = build_array(1, 0u, 'a', 3.2f, false);
for(auto i : data) {
cout << i << " ";
}
cout << endl;
}
이번엔 그냥 "문법"적으로 좀 막혀서...ㅋㅋ 한 줄 한 줄 뜯어보며 설명을 추가해야겠다.
함수 템플릿 선언부
template<typename ... Args>
auto build_array(Args&&... args) -> array<typename common_type<Args...>::type, sizeof...(args)>
- template<typename ... Args>는 가변 템플릿 인자를 선언하는 구문이다. 여기서 Args...는 다양한 타입의 인자들을 나타낸다.
- auto build_array(Args&&... args)는 함수가 가변 수의 인자를 받을 수 있게 한다. 여기서 사용된 Args&&...는 전달 참조를 의미하며, lvalue와 rvalue 참조 모두를 처리할 수 있다.
- -> array<typename common_type<Args...>::type, sizeof...(args)>는 후행 반환 타입을 명시하는 부분이다. 이는 함수가 std::array를 반환함을 나타내며, 배열의 요소 타입은 인자들의 공통 타입(common_type<Args...>::type)으로 결정되고, 배열의 크기는 전달된 인자의 수(sizeof...(args))와 같다.
함수 구현부
{
using commonType = typename common_type<Args...>::type;
return {forward<commonType>((Args&&)args)...};
}
- using commonType = typename common_type<Args...>::type;는 Args...의 공통 타입을 commonType이라는 별칭으로 정의하는 구문이다.
- return {forward<commonType>((Args&&)args)...};는 각 인자를 commonType으로 완벽하게 전달하는 역할을 한다. 여기서 사용된 forward 함수는 인자들의 원래 타입(값이 lvalue인지 rvalue인지)을 유지하면서 commonType으로 변환한다.
요약
이 함수는 다양한 타입의 인자들을 받아, 그 인자들의 공통 타입을 가지는 std::array를 생성하여 반환한다. 이 과정에서 완벽한 전달(perfect forwarding)을 사용하여 인자들의 원래 값 카테고리를 보존한다. 이러한 구현은 함수가 다양한 타입의 인자들을 효율적으로 처리할 수 있게 하며, 유연하고 범용적인 사용을 가능하게 한다.
반응형
'C++ > 연습 문제' 카테고리의 다른 글
[C++] Binary Search Tree (0) | 2024.01.06 |
---|---|
[C++] Binary Tree: 순회 (1) | 2024.01.05 |
[C++] 연습 문제 1. 동적 크기 배열 구현 (0) | 2023.12.16 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- 정보보안기사 #실기 #정리
- Async
- AsyncStorage
- await
- react
- 이탈리안 레스토랑
- redux-thunk
- 인천 구월동 이탈리안 맛집
- 맛집
- 파니노구스토
- javascript
- 인천 구월동 맛집
- Promise
- react-native
- redux
- Total
- Today
- Yesterday