2011-04-06 94 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