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

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板和static相关的知识,希望对你有一定的参考价值。

1. 定义

与任何其他static数据成员相同,模板类的每个static数据成员必须有且仅有一个定义。类模板的每个实例都有一个独有的static对象。

eg. Foo是一个类模板

  • 有一个名为count的public static 成员函数
  • 一个名为ctr的private static数据成员。

每个Foo的实例都有其自己的static成员实例。即,对任意给定类型x,都有一个Foo: :ctr和一个Foo: : count成员。所有Foo类型的对象共享相同的ctr对象和count函数。

template <typename T> class Foo {
	public:
	static std: :size_ t count () { return ctr; }
	
	//其他接口成员
	private :
	static std: :size t ctr;
	//其他实现成员
};

//实例化static成员Foo<string>: :ctr和Foo<string>: :count
Foo<string> fs;

//所有三个对象共享相同的Foo<int>: :ctr和Foo<int>: :count成员
Foo<int> fi, fi2, fi3; 

Foo<int> fi;//实例化Foo<int>类和static数据成员ctr
auto ct = Foo<int>: :count() ; // 实例化Foo<int>: : count
ct = fi.count () ;//使用Foo<int>: :count
ct = Foo: :count() ;//错误:使用哪个模板实例的count?

1.1 变量初始化

template size t Foo: :ctr = 0; //定义并初始化ctr .

1.2 类似任何其他成员函数,一个static成员函数只有在使用时才会实例化。

以上是关于C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板和static的主要内容,如果未能解决你的问题,请参考以下文章

C++ Primer 5th笔记(chap 16 模板和泛型编程)std::move

C++ Primer 5th笔记(chap 16 模板和泛型编程)模板特例化

C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板特例化

C++ Primer 5th笔记(chap 16 模板和泛型编程)实例化

C++ Primer 5th笔记(chap 16 模板和泛型编程)可变参数模板

C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参