C++ 템플릿의 파일 분할
기본적
C++ 템플릿은 기본적으로 제목 파일에서 설명하고 정의해야 합니다.
헤더 파일과 원본 파일로 파일을 분할하려면 명확한 설명이 필요합니다.
test_template.h
template <class T>
class TestTemplate
{
public:
TestTemplate() = default;
T Add(T a, T b);
}
test_template.cpp#include "test_template.h"
template <class T>
T TestTemplate<T>::Add(T a, T b)
{
return a + b;
}
// 明示的に宣言
template class TestTemplate<double>;
main.cpp#include "test_template.h"
int main()
{
TestTemplate<double> test_template;
double result = test_template.Add(1, 2);
return 0;
}
그러나 템플릿 클래스에 내부 클래스나typedef
선언이 있는 경우에도 이를 명시해야 한다.내부 클래스나 typedef 선언이 템플릿 클래스에 있을 때
test_template2.h
template <class T>
class TestTemplate2
{
public:
struct InnerStruct
{
T member;
}
TestTemplate2() = default;
void setMember(const InnerStruct& s);
InnerStruct getMember() const;
private:
InnerStruct inner_;
}
test_template2.cpp#include "test_template2.h"
template <class T>
void TestTemplate2<T>::setMember(const InnerStruct& s)
{
inner_ = s;
}
// typename が必要
template <class T>
typename TestTemplate2<T>::InnerStruct TestTemplate2<T>::getMember() const
{
return inner_;
}
// 明示的に宣言
template class TestTemplate2<double>;
템플릿은 템플릿 매개 변수가 결정되기 전에 실체화되지 않습니다.따라서 컴파일러는
TestTemplate2<T>
를 알 수 없는 종류로 간주한다.만약 그렇다면
TestTemlate2<T>::InnerStruct
이 클래스에 속하는지 구성원 변수에 속하는지 모르겠다.이때 특별히 지정하지 않으면 컴파일러가 구성원 변수로 처리되기 때문에 지정
InnerStruct
은 유형 이름typename
을 명확하게 나타낸다.사이트 축소판 그림
감사합니다.
Reference
이 문제에 관하여(C++ 템플릿의 파일 분할), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/nanbokku/articles/cpp-template-file-division텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)