1、定义一个单例的模板类,以便于其他类可以继承


template <typename T> struct singleton
{static T& Instance();
};template <typename T>
T& singleton<T>::Instance()
{static T t_;return t_;
}

2、实现

class util_tool :public singleton<util_tool>
{private:string m_strExePath;
public:util_tool(void){}~util_tool(void) {}
public:string getpath(){return "hello test";}
};

把类从模板类上继承,这里的构造函数只能是公用的

3、调用

int main()
{
cout << util_tool::Instance().getpath() << endl;
return 0;
}

4、使用友元

以上这种方式还是可以直接创建util_tool 类的,我们换一种方式

#include <iostream>
#include <string>
using namespace std;
template <typename T> struct singleton
{//static T& Instance();static T* v_ins_ptr;// = nullptr;static T *get_instance(){if (v_ins_ptr == nullptr) {v_ins_ptr = new T;}return v_ins_ptr;}
};
template <typename T>
T* singleton<T>::v_ins_ptr = nullptr;

同时我们让singleton<util_tool> 成为自身类的友元,这样,可以访问 protected 成员

class util_tool :public singleton<util_tool>
{friend class singleton<util_tool>;
protected:util_tool() {}
public:string getpath(){cout << "friend class out" << endl;return "hello test";}
};

这是一种技巧方式

c++友元模板单例模式相关推荐

  1. C++中模板类使用友元模板函数 和友员非模版函数!使用不当出现编译错误:无法解析的外部符号…

    在c++海大本科课程设计的最后章节(模板使用 )中涉及到了在Mat类模板中定义友元函数friend Mat<T> operator+(Mat<T> &m, T num) ...

  2. C++知识点61——typename与class、模板编程与继承、模板类和友元、类模板与static成员

    一.typename与class的异同 1.啥时候既可以使用typename,又可以使用class? 当表示模板参数的时候,二者没有区别 2.啥时候只能使用typename,不能使用class? 当模 ...

  3. friend keyword 对于模板 并不只不过友元!!!

    friend是C++中封装的漏网之鱼. C++中的friend同意其它的类或者是函数訪问本类的不论什么成员.甚至是private成员,仅仅要该类声明其为友元. 但是,在有些情况下,并非同意外界訪问类的 ...

  4. C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板和友元

    1. 定义 如果一个类模板包含一个非模板友元,则友元被授权可以访问所有模板实例.如果友元自身是模板,类可以授权给所有友元模板实例,也可以只授权给特定实例. 1.1 一对一友好关系 类模板与另一个(类或 ...

  5. 【C++】模板类的友元函数

    模板类友元函数 模板类的友元函数 参考:https://blog.csdn.net/dreamer_lhs/article/details/53580088 区分:友元是否为函数模板 非模板友元 约束 ...

  6. 当类模板遇到了友元函数

    在我学习数据结构的时候,选用了<数据结构(用面向对象方法与C++语言描述)>殷人昆 编著 这本教材.这本书代码较老有一些错误,好多是无法直接在新版本编译器下实现的. 当时我C++模板学的不 ...

  7. C++ 模板类和友元

    模板类的友元分三类: 1,非模板友元. 2,约束模板友元,即友元的类型取决于类被实例化时的类型. 3,非约束模板友元,即友元的所有具体化都是类的每一个具体化的友元. 1,模板类的非模板友元函数 cou ...

  8. C++ - 类模板(class template)友元(friend) 的 全部六种形式 及 代码

    类模板(class template)友元(friend) 的 全部六种形式 及 代码 版权所有, 禁止转载, 如有需要, 请站内联系; 本文地址: http://blog.csdn.net/caro ...

  9. 模板初步——定义模板

    一.关键点 定义函数模板&类模板 模板参数列表:非类型参数 类模板类名的使用:依据作用域是否加上模板类型 类模板和友元:设置友好关系 模板参数:使用类的类型成员.默认模板实参 成员模板的使用: ...

最新文章

  1. C语言12变21,【C语言】21-结构体
  2. pyqt5学习(四)事件和信号
  3. 数学建模模型概述框架
  4. 给hbase增加协处理器报ERROR: org.apache.hadoop.hbase.DoNotRetryIOException:错误
  5. 设计模式培训之七:模版方法
  6. voyage java_GitHub - yezilong9/voyage: 采用Java实现的基于netty轻量的高性能分布式RPC服务框架...
  7. AUTOSAR从入门到精通100讲(十)-DoIP协议介绍
  8. HDU 2842 Chinese Rings(矩阵高速功率+递归)
  9. 与大家分享一下2010我的找工作历程!真累啊!不过都已经结束了!
  10. easyui datagrid中添加右键菜单事件
  11. Pytest框架教程(一)
  12. 集成学习lgb库调参的粒子群方法
  13. javascript案例---简单的视觉效应
  14. Atitit m4a文件元数据结构 目录 1. 一、基本概念 1 2. MP4文件由若干称为Atom(或称为box)的数据对象组成, 2 2.1. MP4文件概述 2 2.2. M4A没有视频流而已
  15. 求两个等长升序序列的中位数
  16. Drool实战系列(二)之eclipse安装drools插件
  17. matlab latex表示,科学网—MATLAB程序如何在latex上发表? - 卢远志的博文
  18. dnf一天能获得多少黑暗之眼_DNF:想快速积累史诗狗眼?这几个方法可别错过,一天最少四五个...
  19. 【历史上的今天】5 月 15 日:Mozilla 发布 Rust;起点中文网成立;Windows 启动音乐设计者出生
  20. 取名算法之用JAVA实现汉字五行笔画查询

热门文章

  1. 与AI人才有关的讨论
  2. java数青蛙_『字节跳动LeetCode联合周赛』--周赛185(JavaScript) | OFEII
  3. 19天备战 691亿次红包互动 京东云独立抗住了
  4. 全球最大多人在线创作游戏Roblox暂时关闭 官方称将尽快恢复运行
  5. 100亿估值的文和友,为何难以“走出”长沙?
  6. 年轻人还在讨论要不要躺平时,阿里已经注册了“躺平”商标
  7. 百度APP月活跃用户达5.6亿,日登录用户占比超75%
  8. 王传福回应“芯片短缺”:比亚迪没有受到丝毫影响
  9. 数百台湾人把名字改成“鲑鱼”去吃免费日料,结果有人改不回来了
  10. 又到了充钱的时候!苹果AirPods 3最快下月发布