如何在类中键入一个类名

joh*_*hnw 2 c++

以下哪种语法是首选的或在法律上是正确的:

template< class T >
struct S
{
    typedef std::vector< S       > V;
//  typedef std::vector< S< T >  > V;
Run Code Online (Sandbox Code Playgroud)

Visual C++和gcc接受,但C++ Builder XE3在第一个上报告"E2299无法生成模板特化"错误.

eca*_*mur 7

两者都是正确的; 类名注入到类的范围内:C++的哪些特性允许模板类在没有模板参数的情况下引用它们自己?

偶尔使用该功能; 例如,标准在标准库的规范中使用它,以简洁.为清楚起见,您可以考虑在自己的代码中避免使用它.