Я пытаюсь реализовать функцию, которая нуждается в частичной специализации шаблона и отпадает назад к статической структуре, и у меня возникает ряд проблем.Проблема с частичной специализацией шаблона
template<typename T> struct PushImpl<const T&> {
typedef T* result_type;
typedef const T& argument_type;
template<int StackSize> static result_type Push(IStack<StackSize>* sptr, argument_type ref) {
// Code if the template is T&
}
};
template<typename T> struct PushImpl<const T*> {
typedef T* result_type;
typedef const T* argument_type;
template<int StackSize> static result_type Push(IStack<StackSize>* sptr, argument_type ptr) {
return PushImpl<const T&>::Push(sptr, *ptr);
}
};
template<typename T> struct PushImpl {
typedef T* result_type;
typedef const T& argument_type;
template<int StackSize> static result_type Push(IStack<StackSize>* sptr, argument_type ref) {
// Code if the template is neither T* nor T&
}
};
template<typename T> typename PushImpl<T>::result_type Push(typename PushImpl<T>::argument_type ref) {
return PushImpl<T>::Push(this, ref);
}
Первое: структура вложен в другой класс (тот, который предлагает Нажмите как FUNC элемент), но он не может получить доступ к параметру шаблона (STACKSIZE), даже несмотря на мои другие вложенные классы все могли. Я работал над этим, но было бы чище, если бы они могли просто получить доступ к StackSize, как обычный класс.
Второй: компилятор жалуется, что он не использует или не может вывести Т. Действительно?
В-третьих: компилятор жалуется, что он не может специализировать шаблон в текущей области (класс scope).
Я не вижу, в чем проблема. Я случайно вызвал какой-то плохой синтаксис?