首页 > 解决方案 > 仅当函数存在时才调用类中的成员函数

问题描述

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

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

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 为空),对 class3 的调用会发生什么并不重要。

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

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

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

标签: c++sfinae

解决方案


推荐阅读