是否可以从专用模板类调用在非专用模板类中定义的函数?这是我正在尝试的示例:
template <typename T>
struct Convert
{
static inline void toString(unsigned num, unsigned places, std::string& str) { ... }
};
template <>
struct Convert<int8_t>
{
static inline void toString(unsigned num, std::string& str)
{
Convert<int8_t>::toString(num, digitis(num), str);
}
};
GCC 抱怨它看不到非专业的类函数;即我猜它只在专业课上看起来。
有什么想法吗?
编辑
这是我的代码中更具体的示例(带有可能的解决方案):
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);
}
};
我还有其他函数——toString()、countDigits() 等。我选择了这种方法,因此我可以为每种类型保留相同的函数名称(即不需要 toStringU32()、toString32 等)。我考虑过模板专业化,但我不相信这是可能的。