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