一直以来,我发现自己做了这样的事情:
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,但终于想通了,所以我将在下面分享我的答案.