文章标题

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值