2012-05-28 4 views
0

Я хочу написать две различные реализации класса Stack.шаблон специализации класса Stack

(1)

template<typename element_type, typename container_type = std::vector<element_type> > 
    class Stack{//... 

    }; 

(2)

template<typename element_type, size_t container_size> 
    class Stack{ 
    }; 

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

//compiler errors: 

Stack.hpp:119:46: error: declaration of template ‘template<class element_type, long unsigned int container_size> int containers::Stack()’ 
Stack.hpp:25:9: error: conflicts with previous declaration ‘template<class element_type, class container_type> class containers::Stack’ 
Stack.hpp:25:9: error: previous non-function declaration ‘template<class element_type, class container_type> class containers::Stack’ 
Stack.hpp:119:46: error: conflicts with function declaration ‘template<class element_type, long unsigned int container_size> int containers::Stack()’ 
+2

Что, молиться, это ошибка компилятора? – zdan

+0

Какая ошибка? какой компилятор? Plese дает более подробную информацию. –

ответ

1

Вы должны дать им два разных названия, если они принимают разные параметры.

3

Нет, вы не можете. Вы не можете иметь две версии шаблона с разными параметрами шаблона. Я рекомендую вызывать два типа Stack по-другому или помещать их в разные пространства имен.

2

Вы должны написать что-то вроде этого:

template<typename element_type, typename container_type = std::vector<element_type> > 
class Stack { 
    // This is *not* the specialization 
}; 

template<typename element_type> 
class Stack<element_type, std::vector<element_type> > { 
    // Specialization goes here. 
}; 

Edit: Вы не можете изменить тип параметра шаблона.

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