Если вы хотите, чтобы обе функции были доступны, когда T
равен unsigned char
, то сделайте следующее:
template<typename T>
struct AddExtraAppend{}; //empty
template<>
struct AddExtraAppend<unsigned char> //T=unsigned char,so define a function
{
void Append (wchar_t * aData)
{
}
};
template<typename T>
class Buffer : AddExtraAppend<T>
{
void Append (T * aData)
{
}
//Dont define Append(wchar_t *) here
//Because if T is unsigned char, it will be inhereted from AddExtraAppend<>
};
Это основная идея.Вы можете комбинировать его с CRTP для достижения своей цели.
Однако, если вам нужна только одна функция, вы можете сделать это.param<>
шаблон класса как,
template<typename T>
struct param { typedef T type; };
template<> //specialization to satisfy your requirement!
struct param<unsigned char> { typedef wchar_t type; };
Затем определите только одну функцию (вместо двух) как:
void Append (typename param<T>::type * aData)
{
}