仅当函数存在时才调用类中的成员函数

时间:2021-07-02 18:51:16

标签: c++ sfinae

是否可以检查一个类是否有成员函数,如果存在则调用该函数?

这是我正在尝试做的一个例子:

class class1 {
public:
  static YAML::Node getYAML() {
    // Returns a YAML::Node
  }
}

class class2 : public class1 {
  // Inherits getYAML()
}

class class3 {
  // Does not have getYAML()
}

int main() {
  YAML::Node node1 = class1::getYAML()
  YAML::Node node2 = class2::getYAML()
  YAML::Node node3 = class3::getYAML()
}

在此示例中,对 class1 和 class2 的调用将成功调用 getYAML。只要有某种方法可以稍后检测到调用失败(例如 node3 为 null),对 class3 的调用发生了什么并不重要。

编辑: 我正在寻找 SFINAE 的答案。我知道我正在尝试做的事情很奇怪,但我有某些情况需要我这样做。

下面链接了另一个线程,描述了如何检查函数是否存在。但是,它没有给出如何调用该函数的答案。

我不确定我使用的是什么 c++ 版本,但我的 g++ 编译器版本是 4.9.3

0 个答案:

没有答案
相关问题