分类: C/C++
2009-08-05 12:52:51
|
STLBEGINNAMESPACE这个是一个定义的宏
如下:
#define STLBEGINNAMESPACE namespace std{
再如:
#define STLENDNAMESPACE }
这样,只要在这两个宏之间增加的代码,就等于被声明到了std的命名空间了。
STLBEGINNAMESPACE //namespace std{
class A
{
};
STLENDNAMESPACE // }
part 2:
|
#pragma set woff 1209 google一把的话就能找到它是MIPSpro C/C++编译器里supress warning的意思,大致相当于
VC++中的#pragma warning( disable : 1209 )。
关于#pragma你去看C++ ISO标准书的话能找到,它其实并没有多少限定。每个编译器实现都能自己修订。所以研究这个没多大意思,知道你常用的开发环境里可能对你来说有用的就够了。
part 3
|
* 这里摘抄一段网上论坛上的讨论,
__STL_REQUIRES(_ForwardIter, _ForwardIterator);
#define __STL_REQUIRES(__type_var, __concept) \
do { \
void (*__x)( __type_var ) = __concept##_concept_specification< __type_var >\
::__concept##_requirement_violation; __x = __x; } while (0)
* 展开也就是这个样子.
do { \
void (*__x)(_ForwardIter ) = _ForwardIterator_concept_specification< _ForwardIter >\
::_ForwardIterator_concept_requirement_violation; __x = __x; } while (0)
do {} while(0)是宏处理的技巧,且不管他,那也就是这个样子
void (*__x)(_ForwardIter ) =
_ForwardIterator_concept_specification< _ForwardIter >
::_ForwardIterator_concept_requirement_violation;
__x = __x;
* 论坛最后,有人提到下面的句子,说这里是进行一种验证:
// Valid Expressions
_STL_ERROR::__element_assignment_operator_requirement_violation(
__i,
__tmp_ptr,
_Dist());
【 在 nichloas (nil) 的大作中提到: 】
所以如果有语法错误, __x = __x;就会编译不过
* 检查_ForwardIterator_concept_specification的定义可以看出,代码是在检查向前迭代器的条件是否满足:
template
struct _ForwardIterator_concept_specification {
static void
_ForwardIterator_requirement_violation(_ForwardIterator __i) {
// Refinement of InputIterator
_InputIterator_concept_specification<_ForwardIterator>::
_InputIterator_requirement_violation(__i);
}
};
如果想深入研究下STL中的check机制,可以参考下面的这个链接:
http://hi.baidu.com/walkandsing/blog/item/a61af5f86ecef209d9f9fd83.html