创建一个空的派生类有什么意义?

Cas*_*sey -2 c++ subclass

我正在阅读(MSVC++ 2010)limits标题用于知识目的,并注意到这个小宝石:

template<class _Ty>
    class numeric_limits
        : public _Num_base
    {
        //...Insert min, max, lowest, epsilon,
        //round_error, denorm_min, infinity, quiet_Nan, and signaling_Nan
        //that return _Ty(0).
        //In other words, this class does "nothing" in a "safe" manner.*
    };
Run Code Online (Sandbox Code Playgroud)

紧随其后:

template<class _Ty>
    class numeric_limits<const _Ty>
        : public numeric_limits<_Ty>
    {   // numeric limits for const types
    };

template<class _Ty>
    class numeric_limits<volatile _Ty>
        : public numeric_limits<_Ty>
    {   // numeric limits for volatile types
    };

template<class _Ty>
    class numeric_limits<const volatile _Ty>
        : public numeric_limits<_Ty>
    {   // numeric limits for const volatile types
    };
Run Code Online (Sandbox Code Playgroud)

空课提供什么目的?为什么写呢?在这种情况下我理解模板的目的因为模板特化以及传入常量,易失性或常量波动的非基本类型的可能性; 但是,在非模板使用的情况下,它提供了什么目的?


*"无"和"安全"在这种情况下是主观的术语,只有当读者毫无疑问地知道他们真的什么也不做并且安全时,他们的外行定义才适用.我没有,因此免责声明.

Jon*_*ely 7

标准要求numeric_limits<const int>返回与之相同的结果numeric_limits<int>.标准库作者可以复制所有实现,也可以根据另一个实现定义.

空课提供什么目的?为什么写呢?

它不是一个空类,它具有与其基类相同的所有成员.这称为实现继承.

有充分的理由来定义空类型,例如标签调度,但这里没有相关性,因为那些numeric_limits部分特化不管怎样都不会生成空类.