ubtuntu+cmake+c++

单例模式与工厂函数

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;
}
相关推荐
饺子大魔王的男人35 分钟前
Remote JVM Debug+cpolar 让 Java 远程调试超丝滑
java·开发语言·jvm
_F_y7 小时前
MySQL用C/C++连接
c语言·c++·mysql
兩尛7 小时前
c++知识点2
开发语言·c++
fengfuyao9857 小时前
海浪PM谱及波形的Matlab仿真实现
开发语言·matlab
xiaoye-duck7 小时前
C++ string 底层原理深度解析 + 模拟实现(下)——面试 / 开发都适用
开发语言·c++·stl
Azure_withyou8 小时前
Visual Studio中try catch()还未执行,throw后便报错
c++·visual studio
琉染云月8 小时前
【C++入门练习软件推荐】Visual Studio下载与安装(以Visual Studio2026为例)
c++·visual studio
Hx_Ma168 小时前
SpringMVC框架提供的转发和重定向
java·开发语言·servlet
期待のcode9 小时前
原子操作类LongAdder
java·开发语言
L_09079 小时前
【C++】高阶数据结构 -- 红黑树
数据结构·c++