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 1
你的基类没有定义 echo 虚函数
即使是匿名函数,也可以传递基类函数的参数,如 auto func = [](Enermy& e){} |
2
dajj OP 解决了,没想到虚函数是干这个的
|