Orada fonksiyonu şablonlar hiçbir kısmi uzmanlık vardır ve kısmen kısmen sınıf şablonunu uzmanlaşmak ilk gereken bir üyeyi uzmanlaşmak.
template< typename _T, size_t num >
struct Foo {
void Func() {
printf("Hello world!");
}
};
template< typename _T >
struct Foo< _T, 1 > {
void Func() {
printf("Hi!");
}
};
Şimdi Foo
eğer ayrıca, uygulama num
değeri bağımsızdır Func
dışındaki yöntemler içerir ve Foo
uzmanlık onların uygulanmasını çoğaltmak istemiyorum, aşağıdaki modeli uygulayabilirsiniz: CRTP kullanarak
template< typename _T, size_t num >
struct FooFuncBase {
void Func() {
printf("Hello world!");
}
};
template< typename _T >
struct FooFuncBase< _T, 1 > {
void Func() {
printf("Hi!");
}
};
template< typename _T, size_t num >
struct Foo : public FooFuncBase< _T, num > {
void OtherFuncWhoseImplementationDoesNotDependOnNum() {
...
}
};
Veya:
template< typename _Derived, typename _T, size_t num >
struct FooFuncBase {
void Func() {
static_cast< _Derived* >(this)->OtherFuncWhoseImplementationDoesNotDependOnNum();
printf("Hello world!");
}
};
template< typename _Derived, typename _T >
struct FooFuncBase< _Derived, _T, 1 > {
void Func() {
static_cast< _Derived* >(this)->OtherFuncWhoseImplementationDoesNotDependOnNum();
printf("Hi!");
}
};
template< typename _T, size_t num >
struct Foo : public FooFuncBase< Foo< _T, num >, _T, num > {
void OtherFuncWhoseImplementationDoesNotDependOnNum() {
printf("Other");
}
};
Bu çözümü beğendim. Hatta C++ adlandırma kuralı hakkında bir şeyler öğrendim! Ancak, bunların hiçbiri işe yaramazsa geri sayımla birlikte çeşitli sayı değerleri için herhangi bir sayıda uzmanlığa sahip olursam bunu nasıl yapabilirim? –
@wowus, güncellenen yanıt –
Teşekkür ederiz, kabul edilir. –