- 함수가 배열 또는 컨테이너(예: std::vector)의 뷰(view) 만을 필요로 할 때.
- 함수가 읽기 전용 또는 수정 가능한 시퀀스를 받아야 할 때.
- 함수가 컨테이너의 타입에 독립적이어야 할 때 (std::vector, std::array, C-style 배열 모두 수용).
✅ 예제 시나리오: 버퍼를 받아 총합 계산
✅ std::span 사용 버전 (깔끔, 안전, 범용)
#include <iostream>
#include <vector>
#include <array>
#include <span>
int sum(std::span<const int> data) {
int total = 0;
for (int value : data) {
total += value;
}
return total;
}
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::array<int, 5> arr = {1, 2, 3, 4, 5};
int c_array[] = {1, 2, 3, 4, 5};
std::cout << sum(vec) << "\n"; // OK
std::cout << sum(arr) << "\n"; // OK
std::cout << sum(c_array) << "\n"; // OK
return 0;
}
❌ std::span 없이 타입별 오버로드 버전 (지저분하고 유지보수 어려움)
#include <iostream>
#include <vector>
#include <array>
int sum_vector(const std::vector<int>& data) {
int total = 0;
for (int value : data) {
total += value;
}
return total;
}
int sum_array(const std::array<int, 5>& data) {
int total = 0;
for (int value : data) {
total += value;
}
return total;
}
int sum_c_array(const int* data, size_t size) {
int total = 0;
for (size_t i = 0; i < size; ++i) {
total += data[i];
}
return total;
}
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::array<int, 5> arr = {1, 2, 3, 4, 5};
int c_array[] = {1, 2, 3, 4, 5};
std::cout << sum_vector(vec) << "\n"; // OK
std::cout << sum_array(arr) << "\n"; // OK
std::cout << sum_c_array(c_array, 5) << "\n"; // OK
return 0;
}
'Windows > Dev' 카테고리의 다른 글
[Visual Studio] NDK 툴체인 업그레이드 하는 방법 (0) | 2024.11.09 |
---|---|
windows + mac 동시 개발 시 주의 사항 (0) | 2024.10.15 |
[C++] 함수 const 선언 정리 (0) | 2024.09.12 |
[MSVC] 클래스 고찰 & 디컴파일 (0) | 2024.08.08 |
[VC++] 문자열 복사, 이동 (0) | 2024.05.09 |