C++模板类中使用静态成员变量(例如Singleton模式)
2023-09-27 14:28:16 时间
一个最简单Singleton的例子:///////// Test.h /////////template class CTest{private:_T n;static CTest* m_pInstance; // Notice: static member variable in templa...
一个最简单Singleton的例子:
///////// Test.h /////////
template class _T
class CTest
{
private:
_T n;
static CTest _T * m_pInstance; // Notice: static member variable in template class
private:
CTest() { n = 0; }
~CTest() { }
public:
static CTest _T * Instance()
{
if (!m_pInstance)
{
m_pInstance = new CTest _T
}
return m_pInstance;
}
void Set(const _T value) { n = value; }
};
///////// Test.cpp /////////
#include "Test.h"
CTest int * CTest int ::m_pInstance = NULL;
编译时提示: too few template-parameter-lists,真是莫名其妙的错误提示。
在网上找了半天,终于有点眉目了。似乎是应模板使用是编译器做的是Lazy Evaluation,就是说只有当某个模板类(或者模板类中的某个函数)需要实例化时才实例化。也就是说上面这个例子中,编译器在编译到Test.cpp里面的那一句定义语句的时候,发现m_pInstance没有办法在整个类实例化之前分配空间。
解决方法也很简单,在定义静态成员变量的那个前面加上“template ”即可。如下:
///////// Test.cpp /////////
#include "Test.h"
template
CTest int * CTest int ::m_pInstance = NULL;
一个最简单Singleton的例子:
///////// Test.h /////////
template class _T
class CTest
{
private:
_T n;
static CTest _T * m_pInstance; // Notice: static member variable in template class
private:
CTest() { n = 0; }
~CTest() { }
public:
static CTest _T * Instance()
{
if (!m_pInstance)
{
m_pInstance = new CTest _T
}
return m_pInstance;
}
void Set(const _T value) { n = value; }
};
///////// Test.cpp /////////
#include "Test.h"
CTest int * CTest int ::m_pInstance = NULL;
编译时提示: too few template-parameter-lists,真是莫名其妙的错误提示。
在网上找了半天,终于有点眉目了。似乎是应模板使用是编译器做的是Lazy Evaluation,就是说只有当某个模板类(或者模板类中的某个函数)需要实例化时才实例化。也就是说上面这个例子中,编译器在编译到Test.cpp里面的那一句定义语句的时候,发现m_pInstance没有办法在整个类实例化之前分配空间。
解决方法也很简单,在定义静态成员变量的那个前面加上“template ”即可。如下:
///////// Test.cpp /////////
#include "Test.h"
template
CTest int * CTest int ::m_pInstance = NULL;
相关文章
- C++的模板(和java的泛型一样)
- C++ 类型转换(全)
- C++模板之隐式实例化、显示实例化、隐式调用、显示调用和模板特化详解
- C++模板之函数模板实例化和具体化
- C++ 模板类相关问题
- C++ 参数传值 与 传引用
- 58 C++ - 模板机制剖析
- 11 C++ - “新增”bool类型关键字(比较C语言)
- C++ 链接Mysql 函数介绍
- C++实现通过UDP传输文件
- 【c++】深入学习c++中的模板
- C++可变参数模板的展开方式
- 《C++覆辙录》——2.4 for语句引发的理解障碍
- 《C++ Templates中文版》——第2章 函数模板
- 《C++ Templates中文版》——2.4 重载函数模板
- 【C++】关于C++模板的分离编译问题
- C++模板类代码只能写在头文件?
- C++中模板使用详解
- 力扣225 - 用队列实现栈【C/C++实现】
- 173、【动态规划】leetcode ——300. 最长递增子序列 (C++版本)
- 【C++快速上手】十四、C++模板深入学习
- C++模板中的静态
- 快速幂快速乘模板【c++】
- 【足迹C++primer】49、超载,更改,运营商
- C++一个简单的手柄类模板
- C++ and Java template class and function 模板类和模板函数
- C++11 可变模板参数