相关疑难解决方法(0)

C++ 11中的"type-switch"构造

一直以来,我发现自己做了这样的事情:

Animal *animal = ...
if (Cat *cat = dynamic_cast<Cat *>(animal)) {
    ...
}
else if (Dog *dog = dynamic_cast<Dog *>(animal)) {
    ...
}
else { assert(false); }
Run Code Online (Sandbox Code Playgroud)

一旦我看到C++ 11中的闭包,我想知道,这样的事情可能吗?

Animal *animal = ...
typecase(animal,
    [](Cat *cat) {
        ...
    },
    [](Dog *dog) {
        ...
    });
Run Code Online (Sandbox Code Playgroud)

实现类型规划本来应该很容易,但我一直遇到一个问题,它无法弄清楚函数的参数,所以它无法知道尝试使用dynamic_cast,因为很难推断出lambdas的参数.花了几天的时间搜索谷歌和SO,但终于想通了,所以我将在下面分享我的答案.

c++ polymorphism lambda functional-programming c++11

11
推荐指数
1
解决办法
9699
查看次数