boost::mpl::vector(MSVC)源码分析

    技术2022-05-13  58

    代码看起来很直接,没有前面宏定义那么复杂。但头文件的相互包括比较复杂。 如果仅仅是利用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_ {

    最新回复(0)