C++에서 템플릿의 사용법은?
A1: 템플릿은 함수나 클래스를 작성할 때 데이터 타입에 구애받지 않고 사용할 수 있도록 하는 문법입니다. 컴파일 시점에 타입에 따라 구체적인 코드가 생성되어 코드의 재사용성과 유연성을 높여줍니다.
Q2: 함수 템플릿은 어떻게 선언하나요?
A2: 함수 템플릿은 다음과 같이 선언합니다.
```cpp
template
T add(T a, T b) {
return a + b;
}
```
`template
Q3: 클래스 템플릿은 어떻게 선언하나요?
A3: 클래스 템플릿은 다음과 같이 선언합니다.
```cpp
template
class MyClass {
T data;
public:
MyClass(T val) : data(val) {}
T getData() { return data; }
};
```
Q4: 템플릿 사용 시 타입을 명시하는 방법은?
A4: 템플릿 함수를 호출할 때 컴파일러가 자동으로 타입을 추론하지만, 명시적으로 타입을 지정할 수도 있습니다.
```cpp
add
add(3, 4); // 타입 추론
```
A5: 네, 가능합니다. 다음처럼 선언합니다.
```cpp
template
void func(T a, U b) { /* ... */ }
```
Q6: 템플릿 특수화란 무엇인가요?
A6: 템플릿 특수화는 특정 타입에 대해 별도의 구현을 제공하는 것입니다.
예:
```cpp
template <>
class MyClass
// int 타입에 대한 특수화된 구현
};
```
Q7: 템플릿과 인라인 함수는 함께 사용할 수 있나요?
A7: 네, 템플릿 함수는 기본적으로 컴파일러가 코드 생성 시점에 인라인 확장을 고려하므로 함께 사용할 수 있습니다.
Q8: 템플릿 정의는 헤더 파일에 작성해야 하나요?
A8: 네, 템플릿 코드는 컴파일러가 인스턴스화를 할 때 필요하기 때문에, 선언과 정의를 모두 헤더 파일에 넣는 것이 일반적입니다.
Q9: 템플릿 가변 인자란 무엇인가요?
A9: C++11부터 지원하는 기능으로, 여러 개의 타입이나 인자를 가변적으로 받아 처리할 수 있습니다.
예:
```cpp
template
void func(Args... args) { /* ... */ }
```
Q10: 템플릿과 관련된 컴파일 오류가 자주 발생하는 이유는?
A10: 템플릿 코드가 컴파일 시점에 인스턴스화되므로, 오류 메시지가 복잡하고 난해할 수 있습니다. 또한, 템플릿 코드의 정의가 헤더에 없으면 링크 오류가 발생할 수 있습니다.
작성자:
박지수 [비회원]
| 작성일자: 1년 전
2024-09-20 17:11:28
조회수: 142 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 142 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.