2010-06-17 4 views
0

Я пытаюсь реализовать функцию, которая нуждается в частичной специализации шаблона и отпадает назад к статической структуре, и у меня возникает ряд проблем.Проблема с частичной специализацией шаблона

  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).

Я не вижу, в чем проблема. Я случайно вызвал какой-то плохой синтаксис?

ответ

4

Общий случай должен появиться перед специализациями, иначе специализациям нечего специализировать.

 Смежные вопросы

  • Нет связанных вопросов^_^