以下哪項出錯?typedef到模板類型
typedef boost::shared_ptr SharedPtr;
GCC提供了以下錯誤:
ISO C++ forbids declaration of ‘shared_ptr’ with no type
以下哪項出錯?typedef到模板類型
typedef boost::shared_ptr SharedPtr;
GCC提供了以下錯誤:
ISO C++ forbids declaration of ‘shared_ptr’ with no type
C++不(還)有 「模板類型定義」,您可以在 「重命名」 這樣的一個模板。這是一個在C++ 0x中添加的功能,其中這樣的「typedef」被稱爲「別名模板」。
今天的工作,最簡單的解決方法是使用一個類模板與嵌套的typedef:
template <typename T>
struct SharedPtr
{
typedef std::shared_ptr<T> Type;
};
// usage
typename SharedPtr<int>::Type sp;
你可以給出理由,爲什麼它在當前C++中無效?它似乎有點令人討厭,並且它暗示了明顯的行爲。 – 2011-04-06 04:11:53
@Matt:這不僅僅是C++ 98/C++ 03中的語言功能。我同意這很煩人:C++有許多煩惱,幸好其中許多已經在C++ 0x中糾正過。 – 2011-04-06 04:20:12
原因只是shared_ptr不是類型,而是類型的**模板**。另一方面,'shared_ptr
什麼是你想達到什麼目的? – 2011-04-06 01:32:32
我的錯誤,typename不應該在那裏,但現有的答案都不會受到這個影響。 – 2011-04-06 04:11:17
該代碼無效?我從來不知道! +1 – Mehrdad 2011-04-06 04:13:29