//在基类中调用子类的方法
template <typename T>
class base
{
public:
void test()
{
//在基类中用派生类对象
T& obj = static_cast<T&>(*this);
obj.pf();//在基类中调用子类的方法
}
private:
base() {};
friend T;//防止子类中写错
};
//template<typename T>
class child :public base<child>
{
public:
void pf()
{
std::cout << "child exec" << std::endl;
}
};
template<typename T>
class child2 :public base<child2<T>>
{
};
class child3 :public base<child3>//此处基类如果不使用friend,base<child2> 不会报错
{
};
void pf()
{
child3 obj;
obj.test();
}
/
混入
///
//npc属性类
struct npcattr
{
int m_sort; //npc种类:0:代表装饰游戏场景的这种NPC,1:代表商人,卖服装。2:代表把游戏任务派送给玩家。
std::string m_lang; //记录自言自语的一句话
};
//引入玩家属性类:
struct playerattr
{
int m_strength; //力量
int m_agile; //敏捷
int m_constitution; //体质
};
template <