代码看起来很直接,没有前面宏定义那么复杂。但头文件的相互包括比较复杂。
如果仅仅是利用VS助手来寻找代码,出错的可能性非常之大。
对于模板元的调试非常的特殊。正确的代码是不能调试的,而是故意把它写错:比如,
vector1只能存放一个元素,那么故意写成两个元素,超出了界限,编译器自然会报错。
这样可以知道编译器调用的是什么地方的代码了。否则调用的是什么地方的代码都不知道(花了大量的时间来寻找代码)。
有些模板仅仅是声明没有定义。这样只是起一个标记作用,用类型来标记。这个vector同那个vector是不同的。比如:vector_tag<1>和vector_tag<2>就是不同,他们代表不同的类型。它的差异仅仅用类型就可以做到。网上仅有一篇博客说是定义,这儿显然是不对。如果是定义可以生成对像,我试了aux::vector_tag不能生成对像。
// Copyright Aleksey Gurtovoy 2000-2004
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// Preprocessed version of "boost/mpl/vector/vector10.hpp" header
// -- DO NOT modify by hand!
# define BOOST_MPL_AUX_NTTP_DECL(T, x) T x /**/
struct v_iter_tag;//仅仅是一个标志
struct integral_c_tag { BOOST_STATIC_CONSTANT(int, value = 0); };
template< int N>
struct int_
{