C++函数指针

37行代码展示C++函数指针使用方法。

C++函数指针

当某些内存实体的行为在编译时未知,在运行时需要按照实际状况选择调用哪种方法。最常见的方法是使用IF语句来判断。

但是当行为是在初始化时确定,且后续不再变化,频繁的IF调用就显得冗余。此时可以使用函数指针。

#include <iostream>
#include <vector>

class Pet {
public:
  Pet(std::string name) {
    if (name == "dog") {
      this->speak = &Pet::bark;
    } else if (name == "cat") {
      this->speak = &Pet::meow;
    }
  };

  void make_noice(std::string name) { (this->*speak)(name); }

private:
  // What the pet say?
  void (Pet::*speak)(std::string name){nullptr};

  // What the dog say?
  void bark(std::string name) { std::cout << "Woof! " << name << std::endl; }

  // What the cat say?
  void meow(std::string name) { std::cout << "Meow! " << name << std::endl; }
};

int main(int, char **) {
  std::vector<std::string> week{"Monday", "Tuesday",  "Wednesday", "Thursday",
                                "Friday", "Saturday", "Sunday"};
  auto cat = Pet("cat");

  for (auto day : week) {
    cat.make_noice(day);
  }

  return 0;
}