2010-08-28 44 views
5

là nó có thể trong C++ để tạo ra một bí danh của lớp mẫu (mà không cần chỉ định tham số)?Typedef (bí danh) của một lớp chung

typedef std::map myOwnMap; 

không hoạt động.

Và nếu không, có lý do chính xác nào không?

+1

Tôi nghĩ tốt nhất bạn có thể làm là 'sử dụng std :: map;' để nhập 'map' vào không gian tên cục bộ. –

Trả lời

18

Trong C++ 98 và C++ 03 typedef chỉ có thể được sử dụng trên một loại hoàn chỉnh:

typedef std::map<int,int> IntToIntMap; 

Với C++ 0x có một bóng mới cú pháp để thay thế typedef:

using IntToIntMap = std::map<int,int>; 

mà cũng hỗ trợ template răng cưa:

template < 
    typename Key, 
    typename Value, 
    typename Comparator = std::less<Key>, 
    typename Allocator = std::allocator< std::pair<Key,Value> > 
> 
using myOwnMap = std::map<Key,Value,Comparator,Allocator>; 

Ở đây bạn đi :)

6

Tính năng này sẽ được giới thiệu trong C++ 0x, được gọi là bí danh mẫu. Nó sẽ trông như thế này:

template<typename Key, typename Value> 
using MyMap = std::map<Key, Value> 
13

Mẫu máy đánh chữ không được hỗ trợ trong tiêu chuẩn C++ 03. Có cách giải quyết, tuy nhiên:

template<typename T> 
struct MyOwnMap { 
    typedef std::map<std::string, T> Type; 
}; 

MyOwnMap<int>::Type map; 
+0

Câu trả lời dựa trên siêu lập trình tuyệt vời. +1 – paercebal

+0

Ngoại trừ tên kết quả sẽ rất có thể không ngắn hơn nhiều ... – UncleBens

+0

@Uncle: Anh ấy không nói nó là vì mục đích chiều dài và ví dụ của anh ấy có cùng số lần nhấn phím. –

Các vấn đề liên quan