2011-04-06 123 views
5

以下哪項出錯?typedef到模板類型

typedef boost::shared_ptr SharedPtr; 

GCC提供了以下錯誤:

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

+1

什麼是你想達到什麼目的? – 2011-04-06 01:32:32

+0

我的錯誤,typename不應該在那裏,但現有的答案都不會受到這個影響。 – 2011-04-06 04:11:17

+1

該代碼無效?我從來不知道! +1 – Mehrdad 2011-04-06 04:13:29

回答

6

C++不(還)有 「模板類型定義」,您可以在 「重命名」 這樣的一個模板。這是一個在C++ 0x中添加的功能,其中這樣的「typedef」被稱爲「別名模板」。

今天的工作,最簡單的解決方法是使用一個類模板與嵌套的typedef:

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

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

你可以給出理由,爲什麼它在當前C++中無效?它似乎有點令人討厭,並且它暗示了明顯的行爲。 – 2011-04-06 04:11:53

+0

@Matt:這不僅僅是C++ 98/C++ 03中的語言功能。我同意這很煩人:C++有許多煩惱,幸好其中許多已經在C++ 0x中糾正過。 – 2011-04-06 04:20:12

+0

原因只是shared_ptr不是類型,而是類型的**模板**。另一方面,'shared_ptr '是一種類型,可以在typedef中使用。 – 2011-04-06 05:12:09