Özel şablon sınıfından özel olmayan şablon sınıfında tanımlanan bir işlevi çağırmak mümkün mü? Aşağıda, denemeye çalıştığım şeyin bir örneği verilmiştir:Özel şablon sınıfı işlevinden özel olmayan şablon sınıfı işlevini çağırın
GCC, uzman olmayan sınıf işlevini göremeyeceğinden şikayetçidir; Yani sanırım sadece özel sınıfın içinde görünüyor.
Herhangi bir düşünce? toString(), countDigits(), vb Ben - Ben başka işlevlere sahip
struct NonSpecial { };
template <typename T>
class Convert
{
template <typename R>
static inline R fromString(const register char *str, const unsigned str_len)
{
R result = 0;
//convert str to R
return result;
}
friend class Convert<int8_t>;
friend class Convert<uint8_t>;
}
template <>
struct Convert<int8_t>
{
static inline int8_t fromString(const register char* str, const unsigned str_len = 4)
{
Convert<NonSpecial>::fromString<int8_t>(str, str_len);
}
};
template <>
struct Convert<uint8_t>
{
static inline uint8_t fromString(const register char* str, const unsigned str_len = 3)
{
Convert<NonSpecial>::fromString<uint8_t>(str, str_len);
}
};
: Burada DÜZENLEME
daha somut (olası bir çözüm ile) benim kodundan örnektir Bu yaklaşımı seçtiğim için her tip için aynı işlev isimlerini saklayabilirim (yani toStringU32(), toString32, vb.). Şablon uzmanlığını düşündüm ama bunun mümkün olduğuna inanmıyorum.
? Diğer bir deyişle, tek yapmanız gereken uzman olmayan versiyonu çağırıyorsa, neden uzmanlaşmak için ihtiyacınız var? –
'T' türünün statik yöntem üzerinde hiçbir etkisi yoktur - neden ilk etapta orada? Bu bir şablon kötüye kullanımı örneğine benziyor, neden sadece aşırı serbest fonksiyonlara sahip değilsiniz? – Nim
Daha somut örnekle güncellenmiş gönderi. – Graeme