2013-06-25 1 views
1

현재 템플릿 함수는 .cpp 파일 내에 있지만이 템플릿은 헤더에 정의해야합니다. 그러나 머리글로 이동하면 템플릿에서 .cpp 파일 내의 정적 메서드에 액세스 할 수 없습니다. 이 기능을 사용하려면 어떤 변화가 필요합니까?test.h에서 템플릿 함수를 만드는 방법 test.cpp에서 정적 메서드 사용

이것은 유틸리티 헤더 및 cpp이며 클래스와는 관련이 없습니다.

+0

"...이 템플릿을 헤더에 정의해야합니다." 왜? –

+0

"정적 방법"이란 무엇입니까? –

+0

MISRA 규칙을 준수하기 때문에 머리글에 정의해야합니다. static void method_name() {}이 클래스 내에서 사용되지 않고 해당 파일에서만 사용되도록 – user2089851

답변

0

머리글에 정적 메서드를 정의해야합니다.

컴파일러는 기본적으로 각 템플릿 인스턴스화에 대해 새 클래스를 만들기 때문에 템플릿 클래스는 전체적으로 정의되어야하므로 컴파일 타임에 전체 메서드 구현에 액세스 할 수 있어야합니다.

+0

그런 다음 해당 헤더를 포함하는 모든 파일에도 해당 정적 메서드의 정의가 포함되어 있지 않습니까? – user2089851

+0

public으로 선언 된 경우에만. –

+0

이 메서드는 템플릿 기능에 의해서만 사용됩니다. 헤더와 cpp는 클래스와 아무 관련이 없습니다. 공개 또는 비공개가 없습니다 ... – user2089851

2

필자는 헤더 파일에 필요한 모든 기능을 선언하고 그 정의에서 static을 제거했습니다. namespace FunctionName_impl_detail 또는 그와 비슷한 것을 넣으면 이름 충돌로부터 안전합니다. 선언문 근처에서 주석을 직접 사용하는 것을 꺼려하면 주석을 "숨기거나"보호 할 필요가 없을 것입니다. 그러나 대부분 다른 코드에서 사용하지 못하도록하려면 private, static 일부 클래스의 멤버가 될 수 있습니다. friend 템플릿 기능입니다.

관련 문제