Кто-нибудь может объяснить, почему этот код не нуждается в определениях функций? - PullRequest
0 голосов
/ 06 июля 2019

читал книгу с решением разных задач.И получил следующую вещь.Возник вопрос, как проверить, является ли класс производным от другого, используя шаблоны.И был пример того, как это сделать во время компиляции.Я размышляю, почему этот код не нуждается в определениях статической функции.

template<typename T, typename B>
class CIsDerived
{
private:
    class CIsValid
    {
    };

    class CIsInValid
    {
        int sizeExp[3];
    };

    static CIsValid Check(B * pBaseClass);
    static CIsInValid Check(...);

public:
    enum
    {
        Is = sizeof(CIsValid) == sizeof(Check(static_cast<T*>(0)))
    };
};

class CBase
{
    public:
};

class CDerv : public CBase
{
public:

};

void main()
{
    cout << CIsDerived<CDerv, CBase>::Is << endl;
    cout << CIsDerived<string, CBase>::Is << endl;
}

Может ли кто-нибудь предоставить какую-либо книгу, если бы эта вещь была подробно объяснена?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...