C++ 类型转换问题

2019-10-03 12:49:58 +08:00
 dajj

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>

请问有什么好的解决办法

1237 次点击
所在节点    问与答
2 条回复
lspvic
2019-10-03 14:32:32 +08:00
你的基类没有定义 echo 虚函数
即使是匿名函数,也可以传递基类函数的参数,如 auto func = [](Enermy& e){}
dajj
2019-10-04 09:27:29 +08:00
解决了,没想到虚函数是干这个的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/606127

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX