// t9.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
class CRecordBase{
public:
virtual ~CRecordBase()=0{}
virtual CRecordBase* scale(float scale)=0;
};
template <class T>
class CRecordBaseT: public CRecordBase{
public:
virtual CRecordBase* scale(float scale){
T* ret(new T);
((T*)this)->scaleTo(scale, ret);
return ret;
}
};
class BRecord:public CRecordBaseT<BRecord>{
public:
int scaleTo(float scale, BRecord* res){
return 0;
}
};
// CRecordBase <-- CRecordBaseT<> <-- BRecord
void main(){
BRecord r;
r.scale(1);
}