直接结合代码讲解:

//先在工厂使用前注册标签和创建功能
Factory<CreateAnimal> farm;
farm.subscribe("CAT", [](const std::string & n) { return std::make_unique<Cat>(n); });///< std::make_unique这个工厂函数在C++14中引入
farm.subscribe("DOG", [](const std::string & n) { return std::make_unique<Dog>(n); });

//  没有为各种子类型显式地使用构造函数,而是使用工厂方法的实现。工厂方法使用C++11的可变参数模板实现。
  //  它包含继承层次结构中每个对象的创建函数映射:
  using CreateAnimal = std::function<std::unique_ptr<Animal>>(const std::string &) CreateAnimal;

//基于预先分配的标签来分派它们,创建对象
std::unique_ptr<Animal> simon = farm.create("CAT", "Simon");
std::unique_ptr<Animal> marlowe = farm.create("DOG", "Marlowe");

参开文章:

https://github.com/xiaoweiChen/CMake-Cookbook/blob/master/content/chapter1/1.9-chinese.md

拓展

上文代码里用到的代码中的工厂类,可以参考这篇博客里的实现:https://www.cnblogs.com/huangshiyi/p/16435582.html