2015-05-28 2 views
-2

Я новичок в C++, есть способ, которым мы можем передать пользовательский аргумент шаблону.Можем ли мы передать пользовательский тип данных в шаблон в качестве аргумента

Пусть есть класс шаблона, как показано ниже:

template <Class T> 
class Stack 
{ 
    // ..... 
} 

int main() 
{ 
    Stack<employee>; // here employee needs to be obj of a class 
} 

Может кто-то пожалуйста, объясните с примером или направить меня на некоторые ссылки, которые говорят об этом.

Большое спасибо

+0

Если вы не могли этого сделать, шаблоны были бы весьма ограничены в их полезности, вы не думаете, плюс это победит исходный принцип дизайна шаблонов, если вы не можете использовать определяемые пользователем типы – EdChum

+0

См. Этот http: //stackoverflow.com/questions/2871055/user-defined-class-as-a-template-parameter – androidGenX

+0

Я согласен, но мне нужно знать, как это можно сделать с помощью примера. – anonymous

ответ

-2

Нет, параметр шаблона должен быть имя типа (например, класс, структура, встроенные типы и т.д.) в общем случае. Он не может быть объектом типа класса. Хотя в некоторых особых случаях, это может быть переменная/значение целого типа

Я хотел бы предложить вам сделать некоторые чтение, чтобы лучше понять шаблоны http://www.cprogramming.com/tutorial/templates.html http://www.codeproject.com/Articles/257589/An-Idiots-Guide-to-Cplusplus-Templates-Part http://www.josuttis.com/tmplbook/

+0

Пользовательский тип данных означает класс, структуру, объединение или перечисление – bolov

1

шаблоны C++ обычно работают по типам, а иногда и интегральные значения. Поскольку у вас есть объект, а не тип, вы не можете передать его в шаблон.

Вы можете, однако, использовать decltype от C++ 11, чтобы вернуться назад от объекта к его типу. Например, если вы использовали auto widget = someObject.someMethod(); и не использовали тип widget, но хотели их std::vector, вы можете использовать std::vector<decltype(widget)> x;, чтобы создать вектор, содержащий объекты любого типа widget.

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