首页 > 编程语言 >C++接口自动注册

C++接口自动注册

时间:2023-10-08 17:45:10浏览次数:38  
标签:int value instance static 接口 注册 Interface impl C++

#include <iostream>
#include <memory>

template <typename T> class Interface
{
  public:
    static Interface &instance()
    {
        static Interface inst;
        return inst;
    }

    static void reg(T *impl) { instance().m_impl = impl; }
    static void unreg() { instance().m_impl = nullptr; }
    static T *interface() { return instance().m_impl; }

  private:
    T *m_impl;
};

class AbscractConfig
{
  public:
    virtual void set(int value) = 0;
    virtual int get() = 0;
};

class Impl : public AbscractConfig
{
  public:
    Impl() { Interface<AbscractConfig>::reg(this); }
    ~Impl() { Interface<AbscractConfig>::unreg(); }

    void set(int value) override { m_value = value; }
    int get() override { return m_value; }

  private:
    int m_value;
};

static Impl implInst;

int main(int argc, char const *argv[])
{
    auto config = Interface<AbscractConfig>::interface();
    std::cout << "hello: " << config << std::endl;
    config->set(456);
    std::cout << "value: " << config->get() << std::endl;
    return 0;
}

标签:int,value,instance,static,接口,注册,Interface,impl,C++
From: https://www.cnblogs.com/kevinjen/p/17749739.html

相关文章

  • metersphere接口自动化测试流程
    一、在接口定义中创建接口 点击更多操作也可以导入swagger接口二、可设置接口的测试断言规则 三、接口自动化,创建测试场景 场景中关联用例 这里要设置运行环境四、执行测试场景 五、生成测试报告 ......
  • centos7系统中创建临时接口,使用jmeter进行http压测
    要在一台CentOS7服务器上使用JMeter进行HTTP接口的压测,首先需要在服务器上部署一个Web服务器,然后在其上部署您想要测试的接口。以下是一些简单的步骤来实现这一目标:步骤1:在CentOS7服务器上安装Web服务器您可以选择安装常用的Web服务器,比如Apache或Nginx。以下......
  • vue~全局插件和全局方法的注册
    本文介绍如何在vue中定义插件,注册插件和使用插件插件目录/src/plugins插件入口文件/src/plugins/index.jsimportcachefrom'./cache'importmodalfrom'./modal'//安装默认插件,在main.js中引入,通过Vue.use()使用它,因为index.js里使用exportdefault导出,所有在main.js......
  • 身为产品经理该如何向客户推广API商品数据接口
    在当今数字化的时代,API(ApplicationProgrammingInterface,应用程序编程接口)已成为各种软件应用程序之间交互数据的主要方式。API商品数据接口作为一种特殊类型的API,能够让不同的系统之间共享商品数据,从而提高系统的互通性和效率。作为产品经理,推广API商品数据接口是一项重要的任务......
  • 09_接口
    参考:接口深度解析1.接口是什么?Go语言中的接口实现了多态的思想,接口是一组方法的集合,但是这些方法不包含实现的代码。接口是一种类型!通过以下格式来定义接口:typeNamerinterface{Method1(param_list)return_typeMethod2(param_list)return_type...}接......
  • c++如何读取txt文件内容
    一、c++文件流:fstream //文件流ifstream //输入文件流ofstream //输出文件流 二、文件路径的表示1、绝对路径:inf.open("d://DEV_C++//LogFile//游泳数据//LUYINGYAN1039_SensorLog.txt");   注意:双斜线"\\" 2、相对路径:对相对路径而言,路......
  • DEV_C++新建项目及多线程实现
    一、单个C++程序(多线程)//实现txt文件的读入并重写入另外一个txt文件中~#include<fstream>//ifstream#include<iostream>#include<string>//包含getline()#include<string.h>#include<pthread.h>#include<windows.h>//#include<cmath>usin......
  • .net6 webapi 项目注册为windows 服务后访问静态文件
    直接使用kestrel运行程序时,只需要http://localhost:port/file.html即可访问,但是将程序注册为windows服务后,http://localhost:port/file.html会报404的错误,此时要访问到这个文件,http://localhost:port/wwwroot/file.html才行,如果想要windows服务和web的url一致只需要加......
  • 清里谷歌注册表
    WindowsRegistryEditorVersion5.00;WARNING,thisfilewillremoveGoogleChromeregistryentries;fromyourWindowsRegistry.Considerbackingupyourregistrybefore;usingthisfile:http://support.microsoft.com/kb/322756;Torunthisfile,save......
  • destoon注册会员关于邮箱可以重复以及不填写的操作方法
    首先要修改数据库中的destoon_member表中的email字段,因为之前的是:UNIQUEKEY`email`(`email`)因为这样所以插入数据库中的时候邮件就必须不能重复我们需要把改下数据表的属性,用以下语句进行修改:ALTERTABLEdestoon_member DROPINDEXemail;这样就取消了索引键然后我们......