>백엔드 개발 >C++ >템플릿 기반 C 클래스를 .hpp 및 .cpp 파일로 분할할 수 있나요?

템플릿 기반 C 클래스를 .hpp 및 .cpp 파일로 분할할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-12-22 05:49:08926검색

Can Templated C   Classes Be Split into .hpp and .cpp Files?

템플릿 기반 C 클래스를 .hpp/.cpp 파일로 분할: 가능합니까?

문제:

템플릿 기반 C 클래스를 .hpp로 분할하려고 합니다. 및 .cpp 파일은 생성자 및 소멸자에 대한 정의되지 않은 참조로 인해 컴파일 오류가 발생합니다. 기호.

main.cpp:(.text+0xe): undefined reference to 'stack<int>::stack()'
main.cpp:(.text+0x1c): undefined reference to 'stack<int>::~stack()'

코드:

stack.hpp

#ifndef _STACK_HPP
#define _STACK_HPP

template <typename Type>
class stack {
    public:
            stack();
            ~stack();
};
#endif

st ack.cpp

#include <iostream>
#include "stack.hpp"

template <typename Type> stack<Type>::stack() {
        std::cerr << "Hello, stack " << this << "!" << std::endl;
}

template <typename Type> stack<Type>::~stack() {
        std::cerr << "Goodbye, stack " << this << "." << std::endl;
}

main.cpp

#include "stack.hpp"

int main() {
    stack<int> s;

    return 0;
}

답변:

그것 별도의 .cpp 파일에 템플릿 클래스를 구현하고 컴파일하는 것은 불가능합니다. 컴파일러에서는 템플릿 클래스에 대한 메모리 레이아웃 및 메서드 정의를 생성할 때 데이터 형식에 대한 지식이 필요하므로 구현은 .hpp 파일에 포함되어야 합니다. .cpp 파일을 독립적으로 컴파일하려고 하면 다음과 같은 문제가 발생합니다.

  • 객체 파일이 클래스 정보와 함께 생성되지 않습니다.
  • 링커가 클래스에서 기호를 찾지 못합니다. 개체 파일이 삭제되고 빌드가 실패합니다.

대안 해결 방법:

구현 세부 정보를 숨기려면 데이터 구조와 알고리즘을 분리하는 것이 좋습니다. 템플릿화된 클래스를 생성하여 데이터 구조를 표현하고, 템플릿화되지 않은 클래스는 알고리즘을 처리하고 데이터 구조를 활용합니다. 이를 통해 템플릿 클래스에 의존하지 않고도 별도의 라이브러리에 필수 구현 세부 정보를 숨길 수 있습니다.

위 내용은 템플릿 기반 C 클래스를 .hpp 및 .cpp 파일로 분할할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.