::范围解析运算符在c ++中的模板函数调用之前

时间:2012-01-20 06:58:21

标签: c++ templates scope-resolution

我坚持使用模板和范围解析运算符。我在文件中找到了这些行,我无法弄清楚为什么我们在模板函数调用前使用::据我所知,我们只能在引用全局变量时使用::在变量前面。任何想法都会有所帮助

#define CREATE_AND_DECODE_TYPE(Type, buffer, pType) \
    ::CreateAndDecodeType<Type>(buffer, pType, throwVarBindExceptions, static_cast<Type *>(NULL))

1 个答案:

答案 0 :(得分:8)

范围解析运算符::(在开头)强制编译器从全局范围中查找标识符,而不是找到相对于当前范围的标识符。

namespace X
{
    namespace std
    {
        template<typename T>
        class vector {};
    }

    std::vector<int>     x;       // This is X::std::vector
    ::std::vector<int>   y;       // This is the std::vector you normally expect (from the STL)
}