STL源码剖析-基础组件和组态
基本组件
容器
容器本质就是一组类模板
算法
算法的实质是一组函数模板
迭代器
仿函数
仿函数在上篇博客已经有简单讲述,其本质就是重载了函数调用操作符的类
配接器
配接器的作用是将某一物的特征使其变为另外一物,详见queue和stack
配置器
stl中用于分配、释放内存空间
基本组态
- __STL_STATIC_TEMPLSATE_MEMBER_BUG
模板是否支持静态成员
下例为vs2015下的编译结果,可以发现该编译器支持模板类中有静态成员变量。
#include <iostream>
using namespace std;
template <typename T>
class test
{
public:
static T m_data;
};
int test<int>::m_data = 2;
char test<char>::m_data = 'a';
int main()
{
test<int> test_int;
test<char> test_char;
test<char> test_char_sec;
cout << test_int.m_data << endl;
cout << test_char.m_data << endl;
cout << test_char_sec.m_data << endl;
}
- __STL_CLASS_PARTIAL_SPECTLIZATION
测试class template partial specialization,在class template的一般设计之外,对某些模板参数做了特殊处理。具体参见c++ primer 5 类模板特例化
#include <iostream>
using namespace std;
template <typename T>
class test
{
public:
static T m_data;
};
int test<int>::m_data = 2;
char test<char>::m_data = 'a';
int main()
{
test<int> test_int;
test<char> test_char;
test<char> test_char_sec;
cout << test_int.m_data << endl;
cout << test_char.m_data << endl;
cout << test_char_sec.m_data << endl;
}
__STL_GUNCTION_TMPL_PARTIAL_ORDER
略
__STL_EXPLICIT_FUNCTION_TMPL_ARGS
stl未使用该组态
__STL_MEMBER_TEMPLATES
该组态表示模板类中是否支持拥有其他模板成员
#include <iostream>
using namespace std;
class alloc
{
};
template <typename T, class Alloc = alloc>
class vector
{
public:
typedef T value_type;
typedef value_type* iterator;
template <typename I>
void insert(iterator position, I first, I last)
{
cout << "insert()" << endl;
}
};
int main()
{
int ia[5] = { 1,2,3,4,5 };
vector<int> iv;
vector<int>::iterator iter = ia;
iv.insert(iter, ia, ia + 5);
}
__STL_LIMITED_DEFAULT_TEMPLATES
__STL_NON_TYPE_TMPL_PARAM_BUG
__STL_TEMPLSATE_NULL