C++ 类型转换问题
我有一个基类: Enemy , 由基类继承出了三个子类 Enemy1, Enemy2, Enemy3
每个子类都实现了自己的 echo 方法。
另外有一个函数
void test (enemy)
{
enemy->echo();
}
现在的问题是怎么通过回调给函数传递不同的子类。
如果直接调用 test 方法的话, 可以通过 函数模版来实现。 但是通过回调,则涉及匿名函数, 匿名函数无法自动推导 模版函数的指针。 还有一种办法是将 enemy 的类型设置成 void * , 但是这样一来, 函数里面需要强制转换, 不知道是转换成哪个子类了。
完整的代码如下
#include <iostream>
using namespace std;
class Enemy
{
};
class Enemy1:public Enemy
{
public:
void echo()
{
cout<< "enemy1" << endl;
}
};
class Enemy2:public Enemy
{
public:
void echo()
{
cout<< "enemy2" << endl;
}
};
class Enemy3:public Enemy
{
public:
void echo()
{
cout<< "enemy3" << endl;
}
};
class Test
{
public:
template <typename t="">
void echo (T* enemy)
{
enemy->echo();
}
};
int
main()
{
auto enemy1=new Enemy1();
auto enemy2=new Enemy2();
auto enemy3=new Enemy3();
//在此创建一个匿名回调函数
//auto func = [](){};
func(enemy1);
func(enemy2);
func(enemy3);
return 0;
}
</typename></iostream>
请问有什么好的解决办法
1
lspvic 2019-10-03 14:32:32 +08:00 via Android 你的基类没有定义 echo 虚函数
即使是匿名函数,也可以传递基类函数的参数,如 auto func = [](Enermy& e){} |
2
dajj OP 解决了,没想到虚函数是干这个的
|