一个最简单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++模板类中使用静态成员变量(例如Singleton模式)相关推荐

  1. 类中的静态成员变量和静态成员函数

    static静态成员函数 1.static 修饰成员变量 2.static修饰静态成员函数 引子: 静态成员函数: 注意: 3.const 修饰静态成员 静态成员案例 案例1:静态成员 统计类 实例化 ...

  2. C++中的静态成员变量

    文章目录 1 C++中的静态成员变量 1.1 C++中静态成员变量的使用方法 1 C++中的静态成员变量 1.1 C++中静态成员变量的使用方法 在C++中可以定义静态成员变量: 静态成员变量属于整个 ...

  3. java怎么给类中的私有变量赋值_Java学习笔记分享 如何理解接口抽象类和关键字...

    不知不觉中,千锋重庆学习Java已经半个月了,同学们感觉受益匪浅.有一个同学本来是软件编程专业基础却是意外的差,什么标识符.变量的命名规则.方法的定义.数组.面向对象的封装.继承.多态,还有接口.抽象 ...

  4. java怎么给类中的私有变量赋值_Java核心技术笔记分享------第二章 类与对象

    对象与类 一.面向对象思想的概述 1>面向对象与面向过程: 二者都是一种思想,面向对象是相对于面向过程而言的.面向过程强调的是功能行为.面向对象,将功能封装进对象,强调具备了功能的对象. 面向对 ...

  5. C++中关于类中常数静态成员初始化的问题

    class mytestclass { public:     const static int i = 5; }; int main() {     std::cout<<mytestc ...

  6. 5006.c++类中使用static变量bug

    c++类中使用static变量bug 正常情况,一般c++类中,不能使用static 定义成员,一般情况下在定义时编译器会进行报错.我呢由于c语言的使用习惯,没有太注意.在c++类的方法中,写代码时顺 ...

  7. C++中模板类中的成员函数以及模板函数在类外定义

    在C++中,类中的成员函数可以在类外完成定义,从而显得类中的成员函数看起来简洁明了.但是模板类里的成员函数和模板函数与普通的成员函数在类外定义不同. 先定义一个模板类以及成员函数和模板函数: 接下我们 ...

  8. python定义私有变量的方法_Python类中的 私有变量和私有方法

    默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量. 在python中定义私有变量只需要在变 ...

  9. Typescript类中的静态成员

    类中的静态成员,包括静态属性和静态方法,这些成员在类本身上而不是在类的实例上. class Person{static color:string='yellow'}var a=new Person() ...

最新文章

  1. java curl json_curl javaSSm框架中传入json数组的格式方法
  2. 彻底透析SpringBoot jar可执行原理
  3. 优秀logo设计解析_优秀Logo设计!数学美的运用
  4. OceanBase是如何解决城市级故障容灾的
  5. 解决IntelliJ IDEA报错Error: java: 错误: 不支持发行版本 XX
  6. 【渝粤教育】国家开放大学2018年春季 3780-21T燃气设备操作与维护 参考试题
  7. 系统设计:github上学习如何设计大型系统的项目
  8. 重磅福利 | 全网唯一,多年踩坑经验,探索测试策略新奇方法之案例剖析(一)...
  9. 给linux内核传递数组,数组与指针 - Linux C编程实战之路_Linux编程_Linux公社-Linux系统门户网站...
  10. cmd删除txt部分文字_Python识别图片中的文字
  11. java 布局管理器_java布局管理器-borderlayout
  12. 苹果知名开发者怒“怼”:GitHub 不可信,俄罗斯开发者贡献的项目遭毁灭性打击...
  13. 向C语言之父—丹尼斯·里致敬
  14. C语言(静态链接库和动态链接库)
  15. 统计学---总体与样本
  16. 解决Gitlab的The remote end hung up unexpectedly错误
  17. 新华三智慧计算联盟,集结!
  18. Google浏览器打开axure产品原型的解决方案
  19. 评分卡模型案例(一)| 基础知识
  20. createjs php通信,快速入门createjs实例教程

热门文章

  1. 电子元器件从入门到精通pdf_电子元件入门基础,常用电子元器件详解大全作用-涨知识必读...
  2. 引用父类成员的关键字是java_[Java] super关键字:引用父类成员
  3. 计算机安全的重要性 小论文,网络安全的重要性初中议论文
  4. php服务层设计与实现的,PHP中service层怎么设计兼顾优雅和方便?
  5. android 钢琴识别音阶对错_钢琴为什么会成为“乐器之王”
  6. oracle9i查等待事件,什么是Oracle9i中的一个特殊等待事件?
  7. java的jmm模型_【深入理解JVM】:Java内存模型JMM
  8. java visualvm_Java性能调优:利用VisualVM进行性能分析
  9. nginx过滤html输入,nginx屏蔽指定接口(URL)的操作方式
  10. ibm ilog mysql_开源纯C日志函数库iLOG3快速入门(八、如果你喜欢简单日志函数甚于日志函数库)...