читал книгу с решением разных задач.И получил следующую вещь.Возник вопрос, как проверить, является ли класс производным от другого, используя шаблоны.И был пример того, как это сделать во время компиляции.Я размышляю, почему этот код не нуждается в определениях статической функции.
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;
}
Может ли кто-нибудь предоставить какую-либо книгу, если бы эта вещь была подробно объяснена?