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>
请问有什么好的解决办法
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.