템플릿 함수의 소수를 사용하여 Foo
클래스가 있었고 각 유형을 해당 cpp 파일에 A, B, C
계열로 인스턴스화하려는 경우 현재 각각 하나,이 유형을 추가하거나 제거하려는 경우이 오류가 발생할 수 있습니다, 그리고 그것은 매번 업데이 트 성가신입니다. 도움이 될만한 매크로 트릭이나 메타 프로그래밍 기술이 있습니까? 같은일련의 템플릿 함수 또는 클래스를 인스턴스화하는 편리한 솔루션
뭔가 :
//Foo cpp
template <typename T>
T Foo::add(T t0, T 01) {
return t0 + t1;
}
INSTANTIATE_TEMPLATE(Foo::add, A, B, C)
생성합니다 : 당신은 그 기능을 ODR-사용하여 기능과 템플릿 가변 도우미 기능을하고 인스턴스화 할 수
template A Foo::add<A>(A t0, A t1);
template B Foo::add<B>(B t0, B t1);
template C Foo::add<C>(C t0, C t1);
이 있습니까 전문화 완전히 다른
입니다 모든 인스턴스화는 동일합니까? 왜냐하면 그들은 당신이 각 유형별로 선언 할 필요가 없기 때문입니다. 각 유형에 대해 템플릿을 인스턴스화하는 편의 기능을 원한다면 구현은 동일해야합니다. – Kerndog73
구현은 모두 동일하지만 (잘못된 경우 수정하십시오.) 라이브러리/외부에 사용하기 위해 이러한 방식으로 선언해야합니다. – Brian
필요가 없습니다. 템플릿이 헤더 파일에있는 경우 처음 사용할 때 유형별로 인스턴스화됩니다. 따라서'Foo :: add add '은 그것이 호출되는 nomatter라고 처음 불릴 때 인스턴스화 될 것입니다. – Kerndog73