首页 > 编程语言 >C++ Pimpl用法

C++ Pimpl用法

时间:2023-08-18 09:23:14浏览次数:37  
标签:std const string GetImpl C++ 用法 nId Entity Pimpl

点击查看代码
//定义成宏 publicDefine.h
// PIMPL模式声明
#define PIMPL_DEFINE(Classname) \
        const Classname##Impl* GetImpl() const; \
        Classname##Impl* GetImpl(); \
        std::unique_ptr<Classname##Impl> m_pData;

// PIMPL模式实现
#define PIMPL_IMPL(Classname) \
    Classname##Impl* Classname::GetImpl() \
    { \
        return m_pData.get(); \
    } \
    const Classname##Impl* Classname::GetImpl() const \
    { \
        return m_pData.get(); \
    }


  //.h
	class Entity final
	{
	public:
		Entity(int nId, const std::string& entityName);
		~Entity();

		void SetName(const std::string& name);
		std::string GetName() const;

		void SetId(int id);
		int GetId() const;

	private:
		PIMPL_DEFINE(Entity);
	};

/////////////////////////////////
.cpp
class EntityImpl
	{
	public:
		EntityImpl(int nId, const std::string& entityName) : m_nId(nId),
			m_sEntityName(entityName),
			bIsVisile(false)
		{

		}
		int m_nId;
		std::string m_sEntityName;
		bool bIsVisile;
	};

////////////////////////////////
PIMPL_IMPL(Entity);
Entity::Entity(int nId, const std::string& entityName) : m_pData(std::make_unique<EntityImpl>(nId, entityName))
{

}

GCK::Entity::~Entity()
{

}

void Entity::SetName(const std::string& name)
{
	GetImpl()->m_sEntityName = name;
}

std::string Entity::GetName() const
{
	return GetImpl()->m_sEntityName;
}

void Entity::SetId(int id)
{
	GetImpl()->m_nId = id;
}

int Entity::GetId() const
{
	return GetImpl()->m_nId;
}

标签:std,const,string,GetImpl,C++,用法,nId,Entity,Pimpl
From: https://www.cnblogs.com/kinglxg/p/17639485.html

相关文章

  • C++ 字符串分割函数
    #include<iostream>#include<string>#include<vector>#include<algorithm>#include<chrono>usingnamespacestd;voidMyprint(strings){cout<<s<<endl;}vector<string>Split(strings,stringc){......
  • C++函数参数匹配规则
    C++函数参数匹配1单个参数匹配voidf();//f1voidf(int);//f2voidf(int,int);//f3voidf(double,double=3.14);//f4intmain(){f(5.6);//调用f4return0;}candidatefunctions:函数名称相同(f1,f2,f3,f4都是)。viablefunctions:参数个数相同(......
  • Dev C++实现三子棋
    1.新建项目三子棋2.新建game.c,game.h文件3.main.c代码测试三子棋 #include<stdio.h>#include<stdlib.h>#include"game.h"voidmenu(){ printf("***************\n"); printf("*1.play0.exit*\n"); printf("***************\n&qu......
  • 基础算法之搜索与回溯算法C++
    1、组合的输出【题目描述】排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。现要求你用递归的方法输出所有组合。例如n=5,r=3,所有组合为:12312412513413514523......
  • C++ STL算法篇@@
    算法基础算法概述算法部分主要由头文件,,组成.是所有STL头文件中最大的一个,其中常用到的功能范围涉及到比较交换替换便利操作复制修改反转排序合并等等.体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作定义了一些模板类,用以声明函数......
  • 在C++中实现多线程异步TCP消息发送
    本文主要解释了在C++中如何实现一个多线程,异步发送TCP消息的系统。我们将会用到C++的标准库和Boost.Asio库。基础知识TCP(TransmissionControlProtocol):是一种面向连接的、可靠的、基于字节流的通信协议。它在两个网络节点之间创建一个稳定的连接,以便可以交换字节流。多线程编程:......
  • c/c++ 程序错误记录
     //返回类型为int,正常执行代码就会没有返回值,引起段错误inttest(int**a)//错误,引起段错误,且没有打印输出信息。{try{    *a=newint[10];  }catch(constchar*msg){    fprintf(stderr,"%s",msg);    return-1;  }}......
  • 有关C++哈希函数的常用形式,具体解释见注释
    #pragmaonce#include<unordered_set>#include<unordered_map>namespacehash_function{ //将参数传入 template<typename...Types> inlinesize_thash_val(constTypes&...args){ size_tseed=0; hash_val(seed,args...); returnseed;......
  • 笔记整理--C语言--assert用法总结——转载
    assert用法总结assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include<assert.h>voidassert(intexpression);assert的作用是现计算表达式expression,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用abort来......
  • PostgreSQL-log函数的用法
    最近在看关于PostgreSQL内部原理的一些东西,并借助翻译软件,做一些翻译,整理成文档,以便自己能够快速理解的同时,加以记录。在单表查询的开销估算中,关于索引扫描的启动开销,有一个等式,使用到了函数ceil和log2。等式是这样写的:'start-upcost'={ceil(log2(10000))+(1+1)*50}*0.0025=......