c++ - C++中的模式匹配风格?

标签 c++ macros pattern-matching

我喜欢 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/

相关文章:

c - 为什么 SUCCEEDED 宏中有这么多括号?

c++ - 宏扩展中忽略警告 C6031 返回值

python - 如何识别 Pandas DataFrame 中列的行中的字符串重复?

c++ - 删除具有重复相同值的已排序链表中的重复值

c++ - 在类内声明模板化函数(通过容器类型)并在模板类之外通过容器类型定义它 -

c++ - 如何确定三角函数的大小? C++

macros - 在 scheme 中定义 goto

javascript - 带有正则表达式模式的html5输入类型数字

scala - 如何理解scala中的 "pattern match with Singleton object"?

c++ - QFileDialog内存泄漏?