单例模式与工厂函数
cpp
#include <iostream>
#include <list>
#include <functional>
// 前向声明
void *create_board();
// Board基类(抽象类,不可直接实例化)
class Board
{
protected:
Board() {} // 允许派生类构造
public:
static Board &GetInstance()
{
static Board *instance = static_cast<Board *>(create_board());
return *instance;
}
virtual void ShowInfo() = 0; // 纯虚函数,强制派生类实现
virtual ~Board() = default;
};
// 派生类
class MyBoard : public Board
{
public:
void ShowInfo() override
{ // 实现纯虚函数
std::cout << "This is MyBoard\n";
}
};
// 宏生成工厂函数
#define DECLARE_BOARD(BOARD_CLASS_NAME) \
void *create_board() { return new BOARD_CLASS_NAME(); }
DECLARE_BOARD(MyBoard); // 生成 create_board() 返回 new MyBoard()
int main()
{
Board &board = Board::GetInstance();
board.ShowInfo(); // 输出 "This is MyBoard"
return 0;
}