修正:C++のAbstractFactoryはvirtualを使わない
C++のAbstractFactoryはvirtualを使わない - ぷろみん
前回のが抽象化できてない事が発覚したので修正しました。
前回のに修正を乗っけようと思ったのですが、そうするとMixinらへんも関係無くなるので新しいのにしておきました。
抽象化
#include<iostream> namespace torini { class Toy { public: void Play() const {} }; class Game { public: void Play() const {} }; // CRTP template<class Factory> class AbstractFactory { public: auto CreateToy() { return static_cast<const Factory&>(*this).template Create<Toy>(); } auto CreateGame() { return static_cast<const Factory&>(*this).template Create<Game>(); } }; class FactoryA : public AbstractFactory<FactoryA> { public: template<class Product> Product Create() const { std::cout << "FactoryA" << std::endl; return Product(); } }; class FactoryB : public AbstractFactory<FactoryB> { public: template<class Product> Product Create() const { std::cout << "FactoryB" << std::endl; return Product(); } }; } int main() { auto factory = torini::FactoryB(); auto toy = factory.CreateToy(); toy.Play(); auto game = factory.CreateGame(); game.Play(); }