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.