2013-06-15 5 views
2

В общем, мы можем сделатьМожет ли typedef использоваться для вектора вообще?

typedef std::vector<int> container1; 
typedef std::vector<char> container2; 

Но, похоже, мы не можем сделать что-то подобное.

typedef vector container; 
container<int> ins; 

Есть ли все равно для достижения этой цели? Я могу думать о том, как использовать макрос.

+0

Я думаю, что это называется более высоким типом типа (в частности '* -> *') – Antimony

+0

Объявления, содержащие спецификатор decl-speci typedef, объявляют идентификаторы, которые могут быть использованы позже для обозначения фундаментального (3.9.1) или соединения (3.9.2). вектор не является полным типом, но классом шаблона. – yuan

ответ

9

C++11 aliases allows this:

#include <vector> 

template<class T> 
using Vec = std::vector<T>; 
Vec<int> v; // same as std::vector<int> v; 

also see this

И подобным образом, вы можете переписать в C определений типов ++ 11, как:

using container1 = std::vector<int>; 
using container2 = std::vector<char>; 

Это точно так же, как typedefs в вашем вопросе.

+0

Вне C++ вы можете сделать 'template struct container {typedef std :: vector type; }; '(и заменяем' std :: vector' любым контейнером, если вы выберете), и используйте 'typename container :: type'. Это отстой. – Yakk

+0

@perreal: Я отредактировал ваш ответ. Надеюсь, с тобой все в порядке. :-) – Nawaz

+0

@Nawaz, спасибо, гораздо лучше сейчас :) – perreal

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