Aşağıdakilerden hangisi yanlış?typedef şablonun türü
ISO C++ forbids declaration of ‘shared_ptr’ with no type
Aşağıdakilerden hangisi yanlış?typedef şablonun türü
ISO C++ forbids declaration of ‘shared_ptr’ with no type
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;
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. –
@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. –
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
elde etmek çalıştığımız şey:
bugünkü çalışmasına en basit çözüm, yuvalanmış typedef sınıf şablonu kullanmaktır? –
Hatam, typename burada olmamalı, ancak mevcut cevaplardan hiçbiri bundan etkilenmiyor. –
Bu kod geçersiz? Bunu hiç bilmiyordum! +1 – Mehrdad