c++友元模板单例模式

Posted qianbo_insist

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++友元模板单例模式相关的知识,希望对你有一定的参考价值。

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++友元模板单例模式的主要内容,如果未能解决你的问题,请参考以下文章

C++单例模式与单例类模板

单例模式模板(C++)

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

C++ 提高教程 模板-类模板与友元

C++ 单例模式总结与剖析

C++ 单例模板类使我的程序崩溃