첫 번째 질문은 클래스 템플릿에 많은 매개 변수가 실제로 필요합니까? 그렇다면, 그들은 어떤 방법으로 포장 될 수 있습니까?
둘째, 라인 밖의 모든 함수를 정의하는 보일러 플레이트가 실제 코드를 압도하고 있다면, 클래스 정의에서 인라인으로 정의하지 않을까요? 네, 일반적으로 나쁜 스타일이라고 생각하는 사람들도 있지만,이 가이드 라인의 목적은 코드를보다 읽기 쉽게 만드는 것입니다. 반대의 효과가있는 경우 무시하십시오.
당신은 더 나은 코드 조직에 대한 .hpp
파일의 끝 부분에 포함됩니다 별도의 .ipp
파일의 구현을 유지하려는 경우에도 중간에 .ipp
을 포함하여 그것을 변경할 수 있습니다
foo는. HPP :
template <class a, class b ... class x>
class foo {
#include "foo_impl.ipp"
};
foo_impl.ipp : 어느 쪽의 경우
void function1() {}
void function2() {}
그 아이디어는 당신에게 호소력이 있습니다. typedef 나 template alias가 도움이 될 수있는 방법은 없습니다. 그 이유는 그것이 템플릿의 전문화에 이름을 부여하기 때문입니다. 당신이 무엇을 하든지간에, 여전히 무료 인 템플릿 매개 변수는 여전히 나열되어야합니다. 그렇지 않으면 컴파일러는 여러분이 말하는 것을 알지 못할 것입니다.
하지만 당신은 항상 전처리 사용할 수 있습니다 : 당신이 통과 할 필요가 없습니다 두 매크로로 휴식 수정할 수있는 방법이 많이 있습니다
#define FOOMETHOD(rettype) template<class a, class b ... class x> \
rettype foo<a, b, ..., x>
FOOMETHOD(void)::function1() { }
FOOMETHOD(void)::function2() { }
매크로의
::
이-넣어 rettype, 각 유형에 대해 다른 매크로 정의 등. 유스 케이스에 가장 적합한 것으로 보이는 것이 무엇이든, 그렇게하십시오.
글쎄, 당신은 항상 클래스에 인라인 함수 정의를 넣을 수 있습니다 ... – abarnert
얼마나 많은 템플릿 매개 변수가 있습니까? 그것은 주요 이슈처럼 보입니다. – chris
문제는 구현을 분리하고 싶습니다. 그리고 6 개의 매개 변수가 있습니다. – WhatABeautifulWorld