C++的哪些特性允许模板类在没有模板参数的情况下引用自己?

Ben*_*son 6 c++ templates

鉴于:

template <typename T>
class C {
    C & operator ++ () { ... }
};
Run Code Online (Sandbox Code Playgroud)

为什么/如何C允许声明类型的变量和函数C而不是命名C<T>?在使用许多参数来模拟"自我类型"不方便的模板之前,我还没有真正考虑过它.

我应该知道这有什么怪癖吗?

Lig*_*ica 6

[n3290: 14.6.1/1]:与普通(非模板)类一样,类模板具有注入类名(第9节).inject-class-name可以用作模板名称类型名称.当它与template-argument-list一起使用时,作为 模板模板参数的模板参数,或作为友元类模板声明的详细类型说明符中的最终标识符,它引用类模板本身.否则,它等同于template-name,后跟括在其中的类模板的 template-parameters<>.

表面上看,它只是一个方便的功能.

  • 令人惊讶的是两个人upvoted这虽然我已经引述了错误的通道;-)引用标准的电源 - 标准的_any_一部分,看样子 - 不能否认! (3认同)