2011-04-06 18 views
5

Aşağıdakilerden hangisi yanlış?typedef şablonun türü

ISO C++ forbids declaration of ‘shared_ptr’ with no type

+1

elde etmek çalıştığımız şey:

bugünkü çalışmasına en basit çözüm, yuvalanmış typedef sınıf şablonu kullanmaktır? –

+0

Hatam, typename burada olmamalı, ancak mevcut cevaplardan hiçbiri bundan etkilenmiyor. –

+1

Bu kod geçersiz? Bunu hiç bilmiyordum! +1 – Mehrdad

cevap

6

C++ (henüz) Böyle bir şablon "adını" olabilir "şablon typedefs" yok:

typedef boost::shared_ptr SharedPtr; 

GCC aşağıdaki hatayı veriyor. Bu, "typedef" in "alias template" olarak adlandırıldığı C++ 0x'a eklenen bir özelliktir.

template <typename T> 
struct SharedPtr 
{ 
    typedef std::shared_ptr<T> Type; 
}; 

// usage 
typename SharedPtr<int>::Type sp; 
+0

Geçerli C++'da neden geçerli olmadığını açıklayabilir misiniz? Öyle gözükmüyor gibi gözüküyor ve açık bir davranış sergiliyor. –

+0

@Matt: Bu, C++ 98/C++ 03'teki dilin bir özelliği değil. Bu rahatsız edici olduğunu katılıyorum: C++ birçok can sıkıcı ve neyse ki bunların çoğu C++ 0x'da düzeltildi. –

+0

Bunun nedeni, yalnızca shared_ptr'nin bir tür değil, bir tür için ** template ** olmasıdır. Öte yandan, 'shared_ptr ' bir türdür ve bir typedef'te kullanılabilir. –