65,210
社区成员
发帖
与我相关
我的任务
分享#include<iostream>
using namespace std;
class A
{
public:
virtual void Fun()
{
puts("//实现1 ");
}
};
class B:public A
{
public:
virtual void Fun()
{
puts("//实现2 ");
}
};
class C:public B
{
public:
virtual void Fun()
{
puts("//实现3 ");
}
};
class Realize
{
public:
template <class T>
void Use(T &obj)
{
obj.Fun();
}
};
int main() {
Realize a;
C myc;
a.Use(myc);
}
//Realize.h=======================
class Reaize
{
public:
template <class T>
void Use(T &obj);
private:
void RegisterTemplate(); //目的是让函数模版在编译时生成二进制文件,只是编译用,任何时候都不需要调用
};
//Realize.cpp=====================
#include "Realize.h"
template <class T>
void Reaize::Use(T &obj)
{
obj.Fun();
}
void Reaize::RegisterTemplate() //虽然看起来比较傻但是可以解决问题 - -
{
A a;
B b;
C c;
Use(a);
Use(b);
Use(c);
}
#pragma once
#include "B.h"
//Realize.h=======================
class Reaize
{
public:
template <class T>
void Use(T &obj);
};
//Realize.cpp=====================
#include "Realize.h"
template <class T>
void Reaize::Use(T &obj)
{
obj.Fun();
}