我喜欢 Haskell 风格的模式匹配。
我的 C++ 代码如下:
ObjectPtr ptr;
if(ptr.isType<Foo>()) { // isType returns a bool
Ptr<Foo> p = ptr.convertAs<Foo>(); // convertAs returns a Ptr<Foo>
......
}
if(ptr.isType<Bar>()) {
Ptr<Bar> p = ptr.convertAs<Bar>();
......
}
现在,我可以定义任何宏来简化它吗?我一直在思考这个问题,但无法进一步简化。
谢谢!
最佳答案
dynamic_cast
看起来会做你想做的事
struct A {
virtual ~A() {}
};
struct B : struct A { ... };
struct C : struct A { ... };
A * a = new C;
if ( C * c = dynamic_cast<C*>( a ) ) {
c->someCfunc();
}
else if ( B * b = dynamic_cast<B*>( a ) ) {
b->someBfunc();
}
else {
throw "Don't know that type";
}
关于c++ - C++中的模式匹配风格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2216654/