에서 기능을 상속 :
template <typename T>
struct Foo {
//..
void bar() {
/* most or all code here is the same for all T,
and uses nothing that depends on T. */
};
};
그리고 당신이 그와 같은 방식으로 "바"를 정의하고 싶은이 "Foo"를 인스턴스화 할 때마다 하나의 막대 기능 만 사용할 수 있습니다. 즉, Foo<int>::bar
을 Foo<double>::bar
과 다른 기능으로 사용하고 싶지는 않습니다.
"bar"기능은 클래스 템플릿의 구성원이고 인스턴스화의 각 구성원이기 때문에 수행 할 수 없습니다.
대신 할 수 있고해야할 일은 "모든 T에서 동일한"코드가있는 도우미 (무료) 함수를 정의하는 것입니다. 이런 식으로 뭔가 :
namespace {
void Foo_bar_helper(/*..*/) {
/* common code goes here. */
};
};
template <typename T>
struct Foo {
//..
void bar() {
Foo_bar_helper(/* pass the "guts" of Foo<T> here. */);
};
};
일반적으로는, 바 기능이 컴파일러에 의해 인라인 얻을 것이다 정말 남아있는 모든 도우미 함수에 매개 변수로 푸 개체의 "용기"의 확장 (있는 경우)입니다 (원하는대로 외부 링키지를 사용하거나 사용하지 않고 구현할 수 있습니다).
또 다른 옵션은 템플릿이 아닌 기본 클래스에서 상속하는 것입니다.하지만 개인적으로 그런 종류의 상속을 사용하는 것을 좋아하지는 않으며 Foo 객체의 "내장"을 계속 전달해야합니다. (만약에 어떠한).
이미 시도해 보셨습니까? – nbro
템플릿 클래스의 모든 멤버 함수는'template' 자체로 선언하지 않는 한 비 템플릿입니다. 그러나 이것은 아마도 당신이 요구하는 것과 정확히 일치하지 않을 것입니다. –
이 템플릿과 같은 코드를 가지고 있다면 클래스 Object {} 다음에있는 각 함수가 클래스 –
user3813249